单片机 2.docx
- 文档编号:10857013
- 上传时间:2023-05-28
- 格式:DOCX
- 页数:39
- 大小:182.98KB
单片机 2.docx
《单片机 2.docx》由会员分享,可在线阅读,更多相关《单片机 2.docx(39页珍藏版)》请在冰点文库上搜索。
单片机2
实验一LED周期点亮
实验目的:
掌握MCS-51的I/O基本操作,使用延时程序设计。
实验器材:
MCS-51仿真器、LED灯、PC机、5V直流电源、万用表。
实验软件:
MedWin
实验内容:
了解MCS-51仿真器、编译环境、调试方法、软件设计。
设计思路与原理:
利用CPU的循环来实现延时,利用变量i在从0x00-0xff的周期性变化来实现P1口所连接的LED周期性闪烁。
P1口每个IO引脚接1K限流电阻再接LED阴极,LED阳极接5v。
采用负逻辑的原因是,单片机IO口的驱动能力有限,对外无法直接提供大电流。
51单片机IO口的高电平是5V,低电平是0V。
红色LED的管压降在1.6v左右。
通过编程控制IO口的高低电平变化,从而实现控制对LED亮灭的控制。
设计过程:
电路图如下
MCS-51,STC89C52RC单片机代码如下
C语言代码如下
#include
voiddelayms(void);
intmain()
{
inti;
for(i=0;i<16;i++)
{
P1=i;
delayms();
}
}
voiddelayms()
{
inti,j;
for(i=20000;i>0;i--)
for(j=1000;j>0;j--)
;
}
汇编代码如下
$NOMOD51
NAMETEST
P0DATA080H
P1DATA090H
P2DATA0A0H
P3DATA0B0H
T0BIT0B0H.4
ACBIT0D0H.6
T1BIT0B0H.5
T2BIT090H.0
EABIT0A8H.7
IEDATA0A8H
EXF2BIT0C8H.6
RDBIT0B0H.7
ESBIT0A8H.4
IPDATA0B8H
RIBIT098H.0
INT0BIT0B0H.2
CYBIT0D0H.7
TIBIT098H.1
INT1BIT0B0H.3
RCAP2HDATA0CBH
PSBIT0B8H.4
SPDATA081H
T2EXBIT090H.1
OVBIT0D0H.2
RCAP2LDATA0CAH
C_T2BIT0C8H.1
WRBIT0B0H.6
RCLKBIT0C8H.5
TCLKBIT0C8H.4
SBUFDATA099H
PCONDATA087H
SCONDATA098H
TMODDATA089H
TCONDATA088H
IE0BIT088H.1
IE1BIT088H.3
BDATA0F0H
CP_RL2BIT0C8H.0
ACCDATA0E0H
ET0BIT0A8H.1
ET1BIT0A8H.3
TF0BIT088H.5
ET2BIT0A8H.5
TF1BIT088H.7
TF2BIT0C8H.7
RB8BIT098H.2
TH0DATA08CH
EX0BIT0A8H.0
IT0BIT088H.0
TH1DATA08DH
TB8BIT098H.3
EX1BIT0A8H.2
IT1BIT088H.2
TH2DATA0CDH
PBIT0D0H.0
SM0BIT098H.7
TL0DATA08AH
SM1BIT098H.6
TL1DATA08BH
SM2BIT098H.5
TL2DATA0CCH
PT0BIT0B8H.1
PT1BIT0B8H.3
RS0BIT0D0H.3
PT2BIT0B8H.5
TR0BIT088H.4
RS1BIT0D0H.4
TR1BIT088H.6
TR2BIT0C8H.2
PX0BIT0B8H.0
PX1BIT0B8H.2
DPHDATA083H
DPLDATA082H
EXEN2BIT0C8H.3
RENBIT098H.4
T2CONDATA0C8H
RXDBIT0B0H.0
TXDBIT0B0H.1
F0BIT0D0H.5
PSWDATA0D0H
?
PR?
main?
TESTSEGMENTCODE
?
DT?
main?
TESTSEGMENTDATAOVERLAYABLE
?
PR?
delayms?
TESTSEGMENTCODE
EXTRNCODE(?
C_STARTUP)
PUBLICdelayms
PUBLICmain
RSEG?
DT?
main?
TEST
?
main?
BYTE:
i?
040:
DS2
RSEG?
PR?
main?
TEST
main:
USING0
CLRA
MOVi?
040,A
MOVi?
040+01H,A
?
C0001:
INCi?
040+01H
MOVA,i?
040+01H
JNZ?
C0012
INCi?
040
?
C0012:
CLRC
SUBBA,#010H
MOVA,i?
040
XRLA,#080H
SUBBA,#080H
JC?
C0001
?
C0004:
RET
RSEG?
PR?
delayms?
TEST
delayms:
USING0
MOVR7,#020H
MOVR6,#04EH
?
C0005:
MOVR5,#0E8H
MOVR4,#03H
?
C0008:
MOVA,R5
DECR5
JNZ?
C0013
DECR4
?
C0013:
MOVA,R5
ORLA,R4
JNZ?
C0008
?
C0007:
MOVA,R7
DECR7
JNZ?
C0014
DECR6
?
C0014:
MOVA,R7
ORLA,R6
JNZ?
C0005
?
C0011:
RET
END
结果分析:
8个LED周期性闪烁。
实验二八段式LED数字显示
实验目的:
掌握MCS-51的I/O基本操作,使用动态显示程序设计。
实验器材:
MCS-51仿真器、八段式LED、PC机、5V直流电源、万用表。
实验软件:
MedWin
实验内容:
了解MCS-51仿真器、编译环境、调试方法、动态显示软件设计。
设计思路&工作原理:
利用51单片机IO口和两个74HC573八位锁存器控制3个8段式的数码管显示数字。
主要是通过扫描的方式利用视觉暂留效果实现动态显示。
先送段数据,然后锁存,再送位数据,再锁存,然后重复这个过程,之道8个数码管的数据都被送完为止,然后进行下一个周期的循环。
设计过程:
电路图如下:
MCS-51,STC89C52RC单片机代码如下
C语言代码如下:
#include
sbitdula=P2^6;
sbitwela=P2^7;
unsignedcharcodetable[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
voiddelayms(unsignedintxms)//延时函数单位ms
{
unsignedintz,c;
for(z=xms;z>0;z--)
for(c=110;c>0;c--);
}
voiddisplay(unsignedintkk)
{
unsignedintnum1,num2,num3,num4;
num1=kk/1000;
dula=1;
P0=table[num1];
dula=0;
P0=0xff;
wela=1;
P0=0xfe;
wela=0;
delayms
(1);
num2=(kk%1000)/100;
dula=1;
P0=table[num2];
dula=0;
P0=0xff;
wela=1;
P0=0xfd;
wela=0;
delayms
(1);
num3=(kk%100)/10;
dula=1;
P0=table[num3];
dula=0;
P0=0xff;
wela=1;
P0=0xfb;
wela=0;
delayms
(1);
num4=kk%10;
dula=1;
P0=table[num4];
dula=0;
P0=0xff;
wela=1;
P0=0xf7;
wela=0;
delayms
(1);
wela=1;
P0=0xff;
wela=0;
}
main()
{
while
(1)
{
display(123);
}
}
汇编代码如下
NAMETEST
P0DATA080H
P1DATA090H
P2DATA0A0H
P3DATA0B0H
T0BIT0B0H.4
ACBIT0D0H.6
T1BIT0B0H.5
T2BIT090H.0
EABIT0A8H.7
IEDATA0A8H
EXF2BIT0C8H.6
RDBIT0B0H.7
ESBIT0A8H.4
IPDATA0B8H
RIBIT098H.0
INT0BIT0B0H.2
CYBIT0D0H.7
TIBIT098H.1
INT1BIT0B0H.3
RCAP2HDATA0CBH
PSBIT0B8H.4
SPDATA081H
T2EXBIT090H.1
OVBIT0D0H.2
RCAP2LDATA0CAH
dulaBIT0A0H.6
C_T2BIT0C8H.1
WRBIT0B0H.6
welaBIT0A0H.7
RCLKBIT0C8H.5
TCLKBIT0C8H.4
SBUFDATA099H
PCONDATA087H
SCONDATA098H
TMODDATA089H
TCONDATA088H
IE0BIT088H.1
IE1BIT088H.3
BDATA0F0H
CP_RL2BIT0C8H.0
ACCDATA0E0H
ET0BIT0A8H.1
ET1BIT0A8H.3
TF0BIT088H.5
ET2BIT0A8H.5
TF1BIT088H.7
TF2BIT0C8H.7
RB8BIT098H.2
TH0DATA08CH
EX0BIT0A8H.0
IT0BIT088H.0
TH1DATA08DH
TB8BIT098H.3
EX1BIT0A8H.2
IT1BIT088H.2
TH2DATA0CDH
PBIT0D0H.0
SM0BIT098H.7
TL0DATA08AH
SM1BIT098H.6
TL1DATA08BH
SM2BIT098H.5
TL2DATA0CCH
PT0BIT0B8H.1
PT1BIT0B8H.3
RS0BIT0D0H.3
PT2BIT0B8H.5
TR0BIT088H.4
RS1BIT0D0H.4
TR1BIT088H.6
TR2BIT0C8H.2
PX0BIT0B8H.0
PX1BIT0B8H.2
DPHDATA083H
DPLDATA082H
EXEN2BIT0C8H.3
RENBIT098H.4
T2CONDATA0C8H
RXDBIT0B0H.0
TXDBIT0B0H.1
F0BIT0D0H.5
PSWDATA0D0H
?
PR?
_delayms?
TESTSEGMENTCODE
?
PR?
_display?
TESTSEGMENTCODE
?
PR?
main?
TESTSEGMENTCODE
?
CO?
TESTSEGMENTCODE
EXTRNCODE(?
C?
UIDIV)
EXTRNCODE(?
C_STARTUP)
PUBLICtable
PUBLICmain
PUBLIC_display
PUBLIC_delayms
RSEG?
CO?
TEST
table:
DB03FH
DB006H
DB05BH
DB04FH
DB066H
DB06DH
DB07DH
DB007H
DB07FH
DB06FH
DB077H
DB07CH
DB039H
DB05EH
DB079H
DB071H
RSEG?
PR?
_delayms?
TEST
L?
0014:
USING0
L?
0015:
CLRwela
MOVR7,#01H
MOVR6,#00H
_delayms:
USING0
?
C0001:
SETBC
MOVA,R7
SUBBA,#00H
MOVA,R6
SUBBA,#00H
JC?
C0007
MOVR5,#06EH
MOVR4,#00H
?
C0004:
MOVA,R5
DECR5
JNZ?
C0012
DECR4
?
C0012:
MOVA,R5
ORLA,R4
JNZ?
C0004
?
C0003:
MOVA,R7
DECR7
JNZ?
C0001
DECR6
?
C0013:
SJMP?
C0001
?
C0007:
RET
RSEG?
PR?
_display?
TEST
_display:
USING0
MOVR3,AR7
MOVR2,AR6
MOVR4,#03H
MOVR5,#0E8H
LCALL?
C?
UIDIV
SETBdula
MOVA,R7
MOVDPTR,#table
MOVCA,@A+DPTR
MOVP0,A
CLRdula
MOVP0,#0FFH
SETBwela
MOVP0,#0FEH
LCALLL?
0014
MOVR4,#03H
MOVR5,#0E8H
MOVR7,AR3
MOVR6,AR2
LCALL?
C?
UIDIV
MOVR6,#00H
MOVR7,#064H
XCHA,R7
XCHA,R5
XCHA,R7
XCHA,R6
XCHA,R4
XCHA,R6
LCALL?
C?
UIDIV
SETBdula
MOVA,R7
MOVCA,@A+DPTR
MOVP0,A
CLRdula
MOVP0,#0FFH
SETBwela
MOVP0,#0FDH
LCALLL?
0014
MOVR4,#00H
MOVR5,#064H
MOVR7,AR3
MOVR6,AR2
LCALL?
C?
UIDIV
MOVR6,#00H
MOVR7,#0AH
XCHA,R7
XCHA,R5
XCHA,R7
XCHA,R6
XCHA,R4
XCHA,R6
LCALL?
C?
UIDIV
SETBdula
MOVA,R7
MOVCA,@A+DPTR
MOVP0,A
CLRdula
MOVP0,#0FFH
SETBwela
MOVP0,#0FBH
LCALLL?
0015
MOVR6,AR2
MOVR7,AR3
MOVR4,#00H
MOVR5,#0AH
LCALL?
C?
UIDIV
SETBdula
MOVR7,AR5
MOVA,R7
MOVCA,@A+DPTR
MOVP0,A
CLRdula
MOVP0,#0FFH
SETBwela
MOVP0,#0F7H
LCALLL?
0015
SETBwela
MOVP0,#0FFH
CLRwela
RET
RSEG?
PR?
main?
TEST
main:
USING0
?
C0009:
MOVR7,#07BH
MOVR6,#00H
LCALL_display
SJMP?
C0009
END
工作原理:
结果分析:
数码管动态显示出一个三位数。
实验三P1.1口输出周期方波
实验目的:
掌握MCS-51的I/O基本操作,使用定时程序和中断程序设计。
实验器材:
MCS-51仿真器、PC机、5V直流电源、示波器、万用表。
实验软件:
MedWin
实验内容:
了解MCS-51仿真器、编译环境、调试方法、定时程序和中断程序软件设计。
设计思路&工作原理:
利用定时器中断,产生一个比较准的方波信号,在P1.1输出。
本设计采用51单片机的定时器0工作方式1:
16位定时器。
计数位数是16位数,TL0寄存器为低8位,TH0寄存器为高八位,当GATE=0,TR0=1时,TL0在机器周期作用下进行+1计数,直到计数器溢出,TR0=1,申请中断。
由于采用12MHZ晶振,51单片机的系统时钟经过12分频后,为1MHZ,也就即计50000个数,大概耗时50us,因此在定时器中断函数中,改变P1.1口的电平状态,即可实现方波输出,频率为10KHZ
设计过程:
MCS-51,STC89C52RC单片机代码如下
C语言代码如下
#include
sbitPWM=P1^1;
unsignedcharcodetable[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
voiddelayms(unsignedintxms)//延时函数单位ms
{
unsignedintz,c;
for(z=xms;z>0;z--)
for(c=110;c>0;c--);
}
main()
{
PWM=0;
TMOD=0x01;
TH0=(65536-15536)/256;
TL0=(65536-15536)%256;
EA=1;
ET0=1;
TR0=1;
while
(1);
}
voidT0_time()interrupt1
{
TH0=(65536-15536)/256;
TL0=(65536-15536)%256;
PWM=~PWM;
}
汇编语言代码如下
NAMETEST
P0DATA080H
P1DATA090H
P2DATA0A0H
P3DATA0B0H
T0BIT0B0H.4
ACBIT0D0H.6
T1BIT0B0H.5
T2BIT090H.0
EABIT0A8H.7
IEDATA0A8H
EXF2BIT0C8H.6
RDBIT0B0H.7
ESBIT0A8H.4
IPDATA0B8H
RIBIT098H.0
INT0BIT0B0H.2
CYBIT0D0H.7
TIBIT098H.1
INT1BIT0B0H.3
RCAP2HDATA0CBH
PSBIT0B8H.4
SPDATA081H
T2EXBIT090H.1
OVBIT0D0H.2
RCAP2LDATA0CAH
C_T2BIT0C8H.1
WRBIT0B0H.6
RCLKBIT0C8H.5
TCLKBIT0C8H.4
SBUFDATA099H
PCONDATA087H
SCONDATA098H
TMODDATA089H
TCONDATA088H
IE0BIT088H.1
IE1BIT088H.3
BDATA0F0H
CP_RL2BIT0C8H.0
ACCDATA0E0H
ET0BIT0A8H.1
ET1BIT0A8H.3
TF0BIT088H.5
ET2BIT0A8H.5
TF1BIT088H.7
TF2BIT0C8H.7
RB8BIT098H.2
TH0DATA08CH
EX0BIT0A8H.0
IT0BIT088H.0
TH1DATA08DH
TB8BIT098H.3
EX1BIT0A8H.2
IT1BIT088H.2
TH2DATA0CDH
PBIT0D0H.0
SM0BIT098H.7
TL0DATA08AH
SM1BIT098H.6
TL1DATA08BH
SM2BIT098H.5
TL2DATA0CCH
PT0BIT0B8H.1
PT1BIT0B8H.3
RS0BIT0D0H.3
PT2BIT0B8H.5
TR0BIT088H.4
RS1BIT0D0H.4
TR1BIT088H.6
TR2BIT0C8H.2
PX0BIT0B8H.0
PX1BIT0B8H.2
DPHDATA083H
DPLDATA082H
EXEN2BIT0C8H.3
RENBIT098H.4
T2CONDATA0C8H
RXDBIT0B0H.0
TXDBIT0B0H.1
PWMBIT090H.1
F0BIT0D0H.5
PSWDATA0D0H
?
PR?
_delayms?
TESTSEGMENTCODE
?
PR?
main?
TESTSEGMENTCODE
?
PR?
T0_time?
TESTSEGMENTCODE
?
CO?
TESTSEGMENTCODE
EXTRNCODE(?
C_STARTUP)
PUBLICtable
PUBLICT0_time
PUBLICmain
PUBLIC_delayms
RSEG?
CO?
TEST
table:
DB03FH
DB006H
DB05BH
DB04FH
D
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机