单片机第六次实验课——计数器实验
生活随笔
收集整理的這篇文章主要介紹了
单片机第六次实验课——计数器实验
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
(1)采用定時器與計數器相結合的方法使 P1.1 所接的發光二極管亮 1 秒、滅 1 秒,周而復始。(查詢方式、中斷方式)
分析:晶振頻率40MHZ,機器周期為(1/40)*12=03μs,采用工作方式1最大定時為2^16*0.3≈20ms。若采用20ms為半周期,20ms*2*25需要兩根線,P1.0接T1,以T1作計數器,T0作定時器則:計數初值(-65535)補=0001H,(-25)補=E7H
ORG 0000H MAIN: CLR P1.1 SETB P1.0 MOV TMOD,#61H MOV TH1,#0E7H MOV TL1,#0E7H SETB TR1 LOOP1: CPL P1.1 LOOP2: MOV TH0,#00H MOV TL0,#01H SETB TR0 LOOP3: JBC TF0,LOOP4 SJMP LOOP3 LOOP4: CPL P1.0 JBC TF1,LOOP1 AJMP LOOP2 END對應C語言代碼:
#include<reg51.h> #define uchar unsigned charsbit P1_0=P1^0; sbit P1_1=P1^1; timer0()interrupt 1 using 1 {P1_0=!P1_0;TH0=-33334/256;TL0=-33334%256; } timer1()interrupt 3 using 2 {P1_1=!P1_1; } main(){P1_1=0;P1_0=1;TMOD=0x61;TH0=-33334/256;TL0=-33334%256;TH1=-50;TL1=-50;IP=0x08;EA=1;ET0=1;ET1=1;TR0=1;TR1=1;while(1);}
?
?
10ms*2*50,10ms/0.3μs≈33333,(-33333)補=7DCBH
ORG 0000H SJMP MAIN ORG 000BH SJMP TINT0 MAIN: MOV R0,#64H CLR P1.1 MOV TMOD,#01H MOV TH0,#7DH MOV TL0,#0CBH SETB EA SETB ET0 SETB TR0 SJMP $TINT0: CPL P1.0 DJNZ R0,BACK CPL P1.1 MOV R0,#64H BACK: MOV TH0,#7DH MOV TL0,#0CBH RETI END?
對應C語言代碼:
#include<reg51.h> #define uchar unsigned char uchar counter; sbit P1_0=P1^0; sbit P1_1=P1^1; timer0()interrupt 1 using 1 {P1_0=!P1_0;TH0=-33334/256;TL0=-33334%256;if(counter==100){counter=0;P1_1=!P1_1;}elsecounter++; }main(){counter=0;P1_1=0;P1_0=1;TMOD=0x01;TH0=-33334/256;TL0=-33334%256;EA=1;ET0=1;TR0=1;while(1);}
?
總結
以上是生活随笔為你收集整理的单片机第六次实验课——计数器实验的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java通过Excel 模板导出复杂统计
- 下一篇: 《疯狂的程序员》经典语句摘抄