#include<reg52.h>
unsigned char s1=0,s2=0;
unsigned char code table[]=
{
0x05,0x0A,0x50,0xA0,0x55,0xAA,0xFF,0x00
};
void main()
{
TMOD=(TMOD&0X0F)|0X10;
TH1=0X3C;
TL1=0XB0;
EA=1;
ET1=1;
TR1=1;
while(1)
{
P1=table[s2];
}
}
void t1(void) interrupt 3 using 0
{
s1++;
if(s1==20)
{
s1=0;
s2++;
s2=s2&0x07;
}
}
大佬幫忙解釋一下么
uj5u.com熱心網友回復:
首先配置定時器1模式為當時1即16位定時器,定時時間是65536-0x3cb0=40000即40ms,當計時滿足20次即定時0.8s則更換要輸出到p1口的電平信號。uj5u.com熱心網友回復:
不是40而是50ms,總共就計時1s更改一次埠輸出電平uj5u.com熱心網友回復:
main函式內的前三句是配置計時器模式和計數的大小,如果可能得話你可以自己查閱下書籍,單片機初學書上都有。EA,ET1,TR1沒有記錯的話是打開中斷,并開啟中斷標志位。至于死回圈中你執行的是P1口輸出資料,根據你賦值的S2來看,應該是流水燈吧!瞎猜的
;至于interrupt3這就是你的中斷程式,你在這里的操作就是實習切換table陣列索引號的作用。51好久沒有碰了,暫存器不太記得了,你初學的話可以看書配暫存器,這樣學快也能理解快些,個人意見而已





轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/109936.html
標籤:單片機/工控
