失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > 51单片机内部定时器/计数器实验

51单片机内部定时器/计数器实验

时间:2022-10-02 01:15:50

相关推荐

51单片机内部定时器/计数器实验

51单片机内部定时器/计数器实验

一、实验内容

使用MCS-51内部定时/计数器,定时1秒钟,CPU运用定时中断方式,实现每1秒钟输出状态发生一次反转,即发光管每隔1秒钟亮一次(P1.7接LED)。

根据实验内容编写一个程序,并在实验仪器上调试和验证。

二、仿真图

三、代码

C语言实现:

# include <reg52.h># include <intrins.h> # define uint unsigned int # define uchar unsigned char sbit LED=P1^0;uchar t,temp;void init();void main(){t=0;init();while(1){if(t>=20){t=0;LED=~LED ;}}}void init(){// 定时器1TMOD=0x10;//设置定时器1 的工作方式TH1=(65536-50000)/256;TL1=(65536-50000)%256; EA=1;//开总中断ET1=1;//开定时器1 的中断TR1=1;//启动定时器1;}void timr1() interrupt 3{TH1=(65536-50000)/256;TL1=(65536-50000)%256; t++;}

汇编实现:

TICK EQU 10000 ; 10000 X 100US = 1ST100US EQU 156; 100US时间常数(6M)C100US EQU 30H; 100US记数单元LEDBUF BIT 20HORG 0000HLJMP STARTORG 000BHLJMP T0INTORG 0030HSTART: MOV SP, #60HMOV TMOD, #02H ; 定时器0,方式2 MOV TH0, #T100USMOV TL0, #T100USMOV IE, #10000010B; EA=1, IT0 = 1SETB TR0; 开始定时CLR LEDBUFCLR P1.0MOV C100US, #27H;#HIGH(TICK)MOV C100US+1, #10H ;#LOW(TICK)LOOP: MOV C, LEDBUFMOV P1.0, CSJMP LOOPT0INT: PUSH PSWMOV A, C100US+1JNZ GOONDEC C100USGOON: DEC C100US+1MOV A, C100USORL A, C100US+1JNZ EXIT ; 100US 记数器不为0, 返回MOV C100US, #27H; #HIGH(TICK)MOV C100US+1, #10H ; #LOW(TICK)CPL LEDBUF; 100US 记数器为0, 重置记数器,取反LEDEXIT: POP PSWRETIEND

如果觉得《51单片机内部定时器/计数器实验》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。