at89s51的定時/計數器t0產生2秒鐘的定時,每當2秒定時到來時,更換閃爍的燈,每個指示閃爍的頻率為0.2秒。(即l1以0.2秒的速率閃爍,2秒定時到來時,燈l1閃過10下之後,l2開始以0.2秒的速率閃爍,如此迴圈下去,共4個燈,l1~l4)
(說明:定時2秒,採用16位定時50ms,共定時40次才可達到2秒,每50ms產生一中斷,定時的40次數在中斷服務程式中完成,同樣0.2秒的定時,需要4次才可達到0.2秒。對於中斷程式,在主程式中要對中斷開中斷。 由於每次2秒定時到時,l1-l4要交替閃爍。採用id來號來識別。當id=0時,l1在閃爍,當id=1時,l2在閃爍;當id=2時,l3在閃爍;當id=3時,l4在閃爍 )
彙編:tcount2s equ 30h
tcnt02s equ 31h
id equ 32h
org 00h
ljmp start
org 0bh;定時/計數器t0中斷入口位址為000bh,
ljmp int_t0;在中斷入口地方加入長跳轉指令來執行中斷服務程式
start: mov tcount2s,#00h
mov tcnt02s,#00h
mov id,#00h
mov tmod,#01h
mov th0,#(65536-50000) / 256
mov tl0,#(65536-50000) mod 256
setb tr0
setb et0
setb ea
sjmp $
int_t0: mov th0,#(65536-50000) / 256
mov tl0,#(65536-50000) mod 256
inc tcount2s
mov a,tcount2s
cjne a,#40,next
mov tcount2s,#00h
inc id
mov a,id
cjne a,#04h,next
mov id,#00h
next: inc tcnt02s
mov a,tcnt02s
cjne a,#4,done
mov tcnt02s,#00h
mov a,id
cjne a,#00h,sid1
cpl p1.0
sjmp done
sid1: cjne a,#01h,sid2
cpl p1.1
sjmp done
sid2: cjne a,#02h,sid3
cpl p1.2
sjmp done
sid3: cjne a,#03h,sid4
cpl p1.3
sid4: sjmp done
done: reti;中斷服務程式返回
endc語言:
#include
unsigned char tcount2s;
unsigned char tcount02s;
unsigned char id;
void main(void)
void t0(void) interrupt 1 using 0
} tcount02s++;
if(tcount02s==4)
} }
流水燈(取表方式)
利用取表的方法,使p1口的燈做不同變化:左移2次,右移2次,閃爍2次(延時的時間0.2秒)。
說明:
在用**進行程式設計的時候,要用以下的指令來完成
(1). 利用mov
dptr,#data16的指令來使資料指標暫存器指到表的開頭。
(2). 利用movc
a,@a+dptr的指令,根據累加器的值再加上dptr的值,就可以使程式計數器pc指到**內所要取出的資料。
因此,只要把控制碼建成乙個表,而利用movc
a,@a+dptr做取碼的操作,就可方便地處理一些複雜的控制動作
彙編:
org 0
start: mov dptr,#table
loop
: clr a
movc a,@a+dptr
cjne a,#01h,loop1
jmp start
loop1: mov p1,a
mov r3,#20
lcall delay
inc dptr
jmp loop
delay: mov r4,#20
d1: mov r5,#248
djnz r5,$
djnz r4,d1
djnz r3,delay
rettable: db 0feh,0fdh,0fbh,0f7h
db 0efh,0dfh,0bfh,07fh
db 0feh,0fdh,0fbh,0f7h
db 0efh,0dfh,0bfh,07fh
db 07fh,0bfh,0dfh,0efh
db 0f7h,0fbh,0fdh,0feh
db 07fh,0bfh,0dfh,0efh
db 0f7h,0fbh,0fdh,0feh
db 00h, 0ffh,00h, 0ffh
db 01h
endc語言:
#include
unsigned char code table=;
unsigned char i;
void delay(void)
void main(void)
else
} }
可控的花樣流水燈
其實,上文中的電路,並不是實際的硬體電路,其中的數碼顯示器,是使用了 proteus 中的 元件。如果想要製作硬體電路,這個 的元件就必須更換為七段解碼器晶元,選用 cd4511 74ls48 這些解碼器都可以。如果採用軟體解碼,也可以省掉解碼晶元,這更體現了微控制器的智慧型特點。下面就是採用軟體解...
FPGA之花樣流水燈控制模組
例子 8個燈中,硬體控制其中1個led燈以0.5秒的速度正向點亮一次,然後逆向點亮1次,並不斷迴圈。主 系統時鐘為50mhz 分析 首先,訊號 8個燈 系統時鐘clk 需要時鐘0.5秒 實現 系統時鐘分頻0.5秒模組。控制燈亮乙個。module div 25m clk 50m,clk 2hz inp...
51小程式 流水燈 花樣燈
該程式為燈乙個乙個亮 void main void u8 w,i while 1 for i 0,w 0x01 i 8 i port w w 1 delay 2000 只有乙個燈進行流水 花樣流水燈 名稱 花樣流水燈 編寫 jam 日期 2018.7.21 修改 無 功能 花樣燈 第一遍 led1 ...