承接上一節51微控制器定時器的原理與使用,這節我們繼續講述怎麼用定時器做乙個電子鐘,pwm脈衝和測電阻。先從實驗三講起吧!
實驗
三、定時器測電阻
測量如下圖rx的電阻並顯示在數碼管上。
測量思路為:
1、電容c1放電,p2.5與p2.6設定為輸入模式,p2.7設定為推挽輸出且為輸出低電平0。這時候c1通過r1和p2.7放電。
2、切斷c1的放電迴路,將p2.7設為輸入模式。
3、p2.5設為推挽輸出,並且輸出高電平5v,即p2.5的高電平通過rk對c1充電。同時開啟定時器tx。
4、mcu不斷讀p2.7的狀態,當p2.7為高,則關閉定時器。同時p2.5恢復輸入模式。這個過程中定時器記錄了p2.5通過rk對c1充電直到p2.7為高電平的時間t1。
5、將p2.7設為推挽輸出並輸出0,即對c1再次放電。放電完成後,將p2.7恢復為輸入狀態。
6、p2.6設為推挽輸出,並且輸出高電平5v,即p2.6的高電平通過rx對c1充電。同時開啟定時器tx。mcu不斷讀p2.7的狀態,當p2.7為高,則關閉定時器。這個過程中定時器記錄了p2.6通過rx對c1充電直到p2.7為高電平的時間t2。
rk/rx = t1/t2 即 rx = t2*rk/t1
直接上**:
char smgbuf[4]=; //從ram的smgbuf這個位址開始連續存放4個數,並且每個數占乙個單元。
extern unsigned int count; //外部申明,表示並不在這裡申明
void fill_smgbuf() //向led緩衝區填充資料
void load_smg() //將數碼管顯示緩衝區的資料,顯示到數碼管上
p0=0xff; //消除上乙個迴圈的影子
p2 = ~(1<
實驗
一、電子鐘
main.c檔案
#include "reg51.h"
/*實時時鐘 rtc*/
char rtc[3] = ;
extern void load_smg();
unsigned int ms1;
void timer1_init()
void isr_init()
void run_clock()
} }}
void tf1_isr() interrupt 3 //1ms
if(ms>=1000) //1 sec
load_smg();
}void main()
}smg.c檔案
#include "reg51.h"
//char seg[10]=;
code char seg[10]=;
char smgbuf[4]=; //從ram的smgbuf這個位址開始連續存放4個數,並且每個數占乙個單元。
// extern unsigned int count; //外部申明,表示並不在這裡申明
extern char rtc[3];
extern void delay(unsigned int x);
extern unsigned int ms1;
void fill_smgbuf() //向led緩衝區填充資料
void load_smg() //將數碼管顯示緩衝區的資料,顯示到數碼管上
else
p2 = ~(1實驗
二、產生乙個週期周20ms,脈寬1-19ms可變的pwm波,脈寬可以用按鍵選擇,輸出的pwm波去點亮乙個led燈,並用示波器觀察效果。
main.c
#include "reg51.h"
/*用定時器1產生週期為20ms,脈寬為1-19ms*/
sbit out=p1^0; //pwm output pin
unsigned int ms;
unsigned int pwm=10;
extern void key3();
void timer1_init()
void isr_init()
void tf1_isr() interrupt 3 //1ms
//...ms=0-19
if(ms
#include "reg51.h"
extern unsigned int pwm;
sbit k3=p2^6;
void delay(unsigned int x)
void key3()}}
} else
}
51微控制器 定時器
定時 計數器的結構和工作原理 定時 計數器的實質是加1計數器 16位 由高8位和低8位兩個暫存器組成。80c51 微控制器定時 計數器的工作是由兩個特殊功能暫存器控制的。tmod是定時 計數器的工 作方式暫存器,確定工作方式和功能,低四位用於t0,高四位用於t1。t con是控制寄 存器,控制t0和...
51微控制器 定時器
標準的51微控制器內部有t0和t1兩個定時器。定時器的計數值儲存在暫存器中。th0 tl0用於t0,th1 tl1用於t1.定時器儲存暫存器 名稱描述 sfr位址 復位值th0 t0高位元組 0x8c 0x00 tl0t0低位元組 0x8a 0x00 th1t1高位元組 0x8d 0x00 tl1t...
微控制器定時器雙擊 關於51微控制器定時器的靈活使用
前段時間,做乙個專案,有串列埠收發指令判斷,按鍵型別判斷,長短按之類,power的定時關電,事件的輪詢掃瞄更新和display的定時掃瞄。這些要求就對定時器提出了要求,但是我的51微控制器只有兩個定時器,其中乙個又有debug口的波特率產生之用。於是乎我可以用的定時器就只剩下了乙個。怎麼辦?可能大家...