em78p153大功率輪廓燈跳機(jī)同步4回路程序
;*****************************************
;78p153寄存器定義
;*****************************************
R0==0X0;間接尋址IAR
;****CONTREGISTE*************
;76543210
;-INTTSTEPABPSR2PSR1PSR2
;PSRTCCRATEWDTRATE
;0001:21:1
;0011:41:2
;0101:81:4
;0111:161:8
;1001:321:16
;1011:641:32
;1101:1281:64
;1111:2561:128
;---------------------------------
;PAB0:TCC1:WDT
;TETCC信號(hào)邊沿選擇位。0:由高到低加1。1:由低到高加1
;TSTCC信號(hào)源0:內(nèi)部時(shí)鐘。1:外部輸入(P62/TCC)
;INT中斷使能標(biāo)志0:由DISI或硬件中斷屏蔽,1:由ENI/RETL使能中斷。
TCC==0X1
PC==0X2
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
STATUS==0X3
C==0
DC==1
Z==2
P==3;執(zhí)行SLEP時(shí)置為0
T==4;時(shí)間溢出時(shí)置為0
GP0==5;
GP1==6;
RST==7;復(fù)位類型,由引腳喚醒時(shí)置1,其它復(fù)位置0
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
R4==0X4
PORT5==0X5
IOC5==0X5
PORT6==0X6
IOC6==0X6
IOCB==0X0B;為0將P50,P51,P52,P60,P61,P62下拉
IOCC==0X0C;為0將P60,P61,P62,P64,P65,P66,P67漏極開路
IOCD==0X0D;為0將P60,P61,P62,P64,P65,P66,P67上拉
;0:為允許使能。1:為禁止
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
IOCE==0X0E;WDT控制器
WDTE==7;0:禁止,1:允許
EIS==6;0:P60,雙向I/O口,1:外部中斷管腳。此時(shí)IOC6的
BIT0置為1(輸入)
;為“0”時(shí),/通道被屏蔽。INT為“1
”時(shí),可通由P6口讀取其狀態(tài)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
ISR==0XF;中斷狀態(tài)寄存器
TCIF==0;TCC溢出時(shí)置1,軟件清0
ICIF==1;P6口輸入變化置1,軟件清0
EXIF==2;外部中斷,由P60/INT下降沿置1,軟件清0
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
IOCF==0XF;中斷屏蔽寄存器
TCIE==1;0:為中斷禁止。1為中斷允許
ICIE==2;
EXIE==3;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;本程序的要點(diǎn)是計(jì)算電源頻率進(jìn)行計(jì)數(shù)實(shí)現(xiàn)同步。
;保證通電后基本同步開工
a_temp==0x10;中斷子程序中保存A
tcount1==0x11;節(jié)拍計(jì)數(shù)1
tcount2==0x12;節(jié)拍計(jì)數(shù)2
tick==0x13;節(jié)拍常量值1
chtb==0x14;查表序號(hào)值
count2==0x15;定時(shí)計(jì)數(shù)值
temp==0x16;臨時(shí)計(jì)數(shù)器
temp2==0x17
code==0x18;輸出代碼
lamp==0x19;用于閃爍計(jì)數(shù)
spcode==0x1a;代表速度的代碼
stflag==0x1b;是否進(jìn)入一拍標(biāo)志
ifdrim==0x1c;是否夢(mèng)幻
code2==0x1d;
tcount3==0x1e
teMP3==0x1f
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;開始
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
org0x0
jmpmain
;;;;;;;;;;;;;;;;;;;;;;;;
;中斷計(jì)數(shù)子程序
;;;;;;;;;;;;;;;;;;;;;;;;
;龍圖開發(fā)網(wǎng)http://www.longtoo.com原創(chuàng),轉(zhuǎn)載請(qǐng)注明出處
org0x8
intext:
MOV a_temp,a
bcstflag,7;這是是否要進(jìn)入下一態(tài)的標(biāo)志位
clrport5
clrport5;中斷后先清0。
;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;僅用于指示燈
;;;;;;;;;;;;;;;;;;;;;;;;;;;;
inclamp;lamp是指示燈計(jì)數(shù)寄存器,也可以用別的方法
代替
incaspcode;速度代碼0,1,2,3。加1后代入a中
MOV temp2,a;temp2是局部變量,通過(guò)加1成為1,2,3,4。后再減1
判0的方
djztemp2;式來(lái)進(jìn)行指示
jmpspeed2
speed1:
jbclamp,3
jmplampset1
bcport6,1
jmplampok
lampset1:
bsport6,1
jmplampok
speed2:
djztemp2
jmpspeed3
jbclamp,4
jmplampset2
bcport6,1
jmplampok
lampset2:
bsport6,1
jmplampok
speed3:
djztemp2
jmpspeed4
jbclamp,5
jmplampset3
bcport6,1
jmplampok
lampset3:
bsport6,1
jmplampok
speed4:
jbclamp,6
jmplampset4
bcport6,1
jmplampok
lampset4:
bsport6,1;port6,1用于指示燈
jmplampok
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
lampok:
calldelay100u;調(diào)用廷時(shí)子程序越過(guò)0點(diǎn)
jbcifdrim,0;是否夢(mèng)幻,ifdrim判斷是否夢(mèng)幻
jmpintext2;有夢(mèng)幻,
;;;;;;;;;;;;;;;;;;;;;;;;;;
;非夢(mèng)幻子程序
;;;;;;;;;;;;;;;;;;;;;;;;;;
intext1:
MOV a,code;輸出代碼
MOV port5,a
djztcount1;tcount1是主計(jì)數(shù)器
jmpintend
MOV a,tick;tick中有一個(gè)常量值
MOV tcount1,a;在中斷子程序內(nèi)加載數(shù)據(jù)
bsstflag,7;tcount1為0要查表
jmpintend
;;;;;;;;;;;;;;;;;;;;;;;;;;
;夢(mèng)幻子程序
;;;;;;;;;;;;;;;;;;;;;;;;;;
intext2:
djztcount2;同一級(jí)亮度存在拍數(shù)由spcode查表得到
jmpintext21
MOV a,tick;這是一個(gè)查表得來(lái)的值
MOV tcount2,a
;;;;;;;;;;;;;;;;;;;;;;;;;;
djztcount1;tcount1表示節(jié)拍
jmpintext21
bsstflag,7
inctcount1;重置查表標(biāo)志
/*;;;;;;;;;;;;;;;;;;;;;;;;;
;tcount1!=tcount3
;;;;;;;;;;;;;;;;;;;;;;;;;
intext25:
MOV a,tcount1
suba,tcount3
jbcstatus,c;若為1則無(wú)借位,tcount1>tcount3
jmpintext27
MOV temp3,a;差放入temp3中
inctemp3
inctemp3
MOV a,tcount3
MOV temp,a
intext28:
calldelay100u;第一波廷時(shí)
djztemp
jmpintext28
MOV a,code2;先輸出code2,即處于消暗的代碼
MOV port5,a
intext29:
calldelay100u
djztemp3
jmpintext29
MOV a,code;再輸出code,即處于上漲的代碼
MOV port5,a
jmpintext21
intext27:
MOV a,tcount3
suba,tcount1
MOV temp3,a
inctemp3
inctemp3
MOV a,tcount1
MOV temp,a
intext30: