① 怎麼用51單片機定時1個小時 好像是循環,具體匯編程序是怎樣的
開啟定時器作為時間基準,
然後再設置幾個軟體計數器,
比如,你設定定時器每隔10毫秒中斷一次,
軟體計數器a加1,當a數值=100時,就已經定時1秒了,
軟體計數器b這時+1,當b數值=60時,就已經定時1分了,
軟體計數器c這時+1,當c數值=60時,就已經定時1小時了。
就是這樣累積的定時,
明白?
② 51單片機定時器初始化程序的基本步驟
1.設置工作方式即TMOD的值
2.計算初值寫TH TL的值
3.開啟定時器中斷和總中斷
4.啟動定時器。
③ 51單片機定時器的匯編語言程序編程,
LED BIT P1.0 ;定義LED的引腳
ORG 0000H
LJMP MAIN
ORG 000BH
LJMP T0ISR
ORG 0030H
MAIN:
MOV TMOD,#01H ;定時器0工作模式1
MOV TH0,#HIGH(65536-50000) ;初值,50毫秒中斷一次
MOV TL0,#LOW(65536-50000)
SETB TR0 ;啟動定時器
SETB ET0 ;啟動定時器中斷
SETB EA ;開總中斷
MOV R2,#40 ;中斷計數初始值
SJMP $
T0ISR:
CLR TR0
MOV TH0,#HIGH(65536-50000)
MOV TL0,#LOW(65536-50000)
SETB TR0
DJNZ R2,T0E ;R2減到0重新賦值,否則退出
MOV R2,#40
CPL LED ;LED亮滅轉換
T0E:
RETI
END
④ 試用51單片機C51編寫一電腦鍾程序,定時器用方式2中斷處理實現
第一問比較簡單,拓展功能比較繁瑣,要考慮閏年的影響,計算復雜一些。
以下是簡單的時鍾:
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar a=0;//中斷次數
uchar sec=0,min=0,hour=0;//時分秒
uchar date=1,mon=1, year=19;//年月日,年只計算後2 位,如2019,只考慮19
uchar tablemon[12]={31,28,31,30,31,30,31,31,30,31,30,31};//每月有多少天,2月按28天考慮
void main(void )//主程序
{
TMOD=0x01;// 定時器0工作方式一,方式2一次只能定時256us,中斷太頻繁 ,不建議使用
ET0=1;
EA=1;
TH0=(65536-50000)/256;//定時50ms
TL0=(65536-50000)%256;
TR0=1;
while(1)
{ dislpay();}//顯示子程序,與硬體連接有關
}
//中斷子程序
void Timer0(void) interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
a++;
if(a==20) {a=0;sec++;}//20次是1秒
if(sec==60) {sec=0;min++;}
if(min==60) {min=0;hour++;}
if(hour==24){hour=0;date++;}
if(date>tablemon[ mon-1]){date=1;mon++;}
if(mon==13){mon=1;year++;}
}
⑤ 51單片機定時器中斷程序
再次重新啟動。
⑥ 51單片機定時器編程
10ms中斷後次,計中斷的200次求反P1.1、P1.2
ORG 0000H
START: LJMP MAIN
ORG 001BH
LJMP CTC1 ……1分
ORG 0100H
MAIN : MOV TMOD,#00H ……3分
MOV R0,#200
MOV TH1, #0CH
MOV TL1, #78H
SETB EA ……3分
SETB ET1
LOOP: SETB TR1
HERE: SJMP $
CTC1: MOV TH1, #0CH ……3分
MOV TL1, #78H
DJNZ R0,RTI
MOV R0,#200
CPL P1.1
CPL P1.2
RTI: RETI
END
⑦ 51單片機定時器問題
你5ms中斷一次,而你在中斷程序里向液晶屏寫數據,耗時遠超5ms,因此中斷次序被打亂,時間就不準了。解決辦法一是加大定時時長50ms中斷一次,二是可以將寫液晶屏操作放入主程序中。中斷程序一定要短小精悍,只進行一些重要的操作,將那些耗時長的不重要的操作放主程序中,像寫液晶屏,即使被打斷,顯示錯誤的幾率是很小的。
⑧ 51單片機 定時器程序 是怎麼走的
你說的沒錯,那句主循環上面的代碼只會執行一次,執行後下面就進入了while(1)無限循環中,執行循環的指令,在循環過程中,定時器也在運行,當定時器溢出引起中斷時,程序就跳轉到中斷服務函數繼續執行,中斷服務結束後繼續在主循環中循環,並不是從主函數的最上面開始運行。