历史上的今天
今天是:2025年01月27日(星期一)
2018年01月27日 | em78p153大功率轮廓灯跳机同步4回路程序
2018-01-27 来源:eefocus
;*****************************************
; 78p153寄存器定义
;*****************************************
R0 == 0X0 ;间接寻址IAR
;****CONT REGISTE*************
; 7 6 5 4 3 2 1 0
; - INT TS TE PAB PSR2 PSR1 PSR2
; PSR TCC RATE WDT RATE
; 000 1:2 1:1
; 001 1:4 1:2
; 010 1:8 1:4
; 011 1:16 1:8
; 100 1:32 1:16
; 101 1:64 1:32
; 110 1:128 1:64
; 111 1:256 1:128
;---------------------------------
; PAB 0:TCC 1:WDT
; TE TCC信号边沿选择位。0:由高到低加1。 1:由低到高加1
; TS TCC信号源 0:内部时钟。 1:外部输入(P62/TCC)
; INT 中断使能标志 0:由DISI或硬件中断屏蔽,1:由ENI/RETL使能中断。
TCC == 0X1
PC == 0X2
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
STATUS == 0X3
C == 0
DC == 1
Z == 2
P == 3 ;执行SLEP时置为0
T == 4 ;时间溢出时置为0
GP0 == 5 ;
GP1 == 6 ;
RST == 7 ;复位类型,由引脚唤醒时置1,其它复位置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:外部中断管脚。此时IOC6的
BIT0置为1(输入)
;为“0”时,/通道被屏蔽。INT为“1
”时,可通由P6口读取其状态
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
ISR == 0XF ;中断状态寄存器
TCIF == 0 ;TCC溢出时置1,软件清0
ICIF == 1 ;P6口输入变化置1,软件清0
EXIF == 2 ;外部中断,由P60/INT下降沿置1,软件清0
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
IOCF == 0XF ;中断屏蔽寄存器
TCIE == 1 ;0:为中断禁止。1为中断允许
ICIE == 2 ;
EXIE == 3 ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;本程序的要点是计算电源频率进行计数实现同步。
;保证通电后基本同步开工
a_temp == 0x10 ;中断子程序中保存A
tcount1 == 0x11 ;节拍计数1
tcount2 == 0x12 ;节拍计数2
tick == 0x13 ;节拍常量值1
chtb == 0x14 ;查表序号值
count2 == 0x15 ;定时计数值
temp == 0x16 ;临时计数器
temp2 == 0x17
code == 0x18 ;输出代码
lamp == 0x19 ;用于闪烁计数
spcode == 0x1a ;代表速度的代码
stflag == 0x1b ;是否进入一拍标志
ifdrim == 0x1c ;是否梦幻
code2 == 0x1d ;
tcount3 == 0x1e
teMP3 == 0x1f
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;开始
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
org 0x0
jmp main
;;;;;;;;;;;;;;;;;;;;;;;;
;中断计数子程序
;;;;;;;;;;;;;;;;;;;;;;;;
;龙图开发网 http://www.longtoo.com 原创,转载请注明出处
org 0x8
intext:
MOV a_temp,a
bc stflag,7 ;这是是否要进入下一态的标志位
clr port5
clr port5 ;中断后先清0。
;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;仅用于指示灯
;;;;;;;;;;;;;;;;;;;;;;;;;;;;
inc lamp ;lamp是指示灯计数寄存器,也可以用别的方法
代替
inca spcode ;速度代码0,1,2,3。加1后代入a中
MOV temp2,a ;temp2是局部变量,通过加1成为1,2,3,4。后再减1
判0的方
djz temp2 ;式来进行指示
jmp speed2
speed1:
jbc lamp,3
jmp lampset1
bc port6,1
jmp lampok
lampset1:
bs port6,1
jmp lampok
speed2:
djz temp2
jmp speed3
jbc lamp,4
jmp lampset2
bc port6,1
jmp lampok
lampset2:
bs port6,1
jmp lampok
speed3:
djz temp2
jmp speed4
jbc lamp,5
jmp lampset3
bc port6,1
jmp lampok
lampset3:
bs port6,1
jmp lampok
speed4:
jbc lamp,6
jmp lampset4
bc port6,1
jmp lampok
lampset4:
bs port6,1 ;port6,1用于指示灯
jmp lampok
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
lampok:
call delay100u ;调用廷时子程序越过0点
jbc ifdrim,0 ;是否梦幻,ifdrim判断是否梦幻
jmp intext2 ;有梦幻,
;;;;;;;;;;;;;;;;;;;;;;;;;;
;非梦幻子程序
;;;;;;;;;;;;;;;;;;;;;;;;;;
intext1:
MOV a,code ;输出代码
MOV port5,a
djz tcount1 ;tcount1是主计数器
jmp intend
MOV a,tick ;tick中有一个常量值
MOV tcount1,a ;在中断子程序内加载数据
bs stflag,7 ;tcount1为0要查表
jmp intend
;;;;;;;;;;;;;;;;;;;;;;;;;;
;梦幻子程序
;;;;;;;;;;;;;;;;;;;;;;;;;;
intext2:
djz tcount2 ;同一级亮度存在拍数由 spcode查表得到
jmp intext21
MOV a,tick ;这是一个查表得来的值
MOV tcount2,a
;;;;;;;;;;;;;;;;;;;;;;;;;;
djz tcount1 ;tcount1表示节拍
jmp intext21
bs stflag,7
inc tcount1 ;重置查表标志
/*;;;;;;;;;;;;;;;;;;;;;;;;;
;tcount1!=tcount3
;;;;;;;;;;;;;;;;;;;;;;;;;
intext25:
MOV a,tcount1
sub a,tcount3
jbc status,c ;若为1则无借位,tcount1>tcount3
jmp intext27
MOV temp3,a ;差放入temp3中
inc temp3
inc temp3
MOV a,tcount3
MOV temp,a
intext28:
call delay100u ;第一波廷时
djz temp
jmp intext28
MOV a,code2 ;先输出code2,即处于消暗的代码
MOV port5,a
intext29:
call delay100u
djz temp3
jmp intext29
MOV a,code ;再输出code,即处于上涨的代码
MOV port5,a
jmp intext21
intext27:
MOV a,tcount3
sub a,tcount1
MOV temp3,a
inc temp3
inc temp3
MOV a,tcount1
MOV temp,a
intext30:
call delay100u
djz temp
jmp intext30
MOV a,code ;输出code,即处于上涨的代码
MOV port5,a
intext31:
call delay100u
djz temp3
jmp intext31
MOV a,code2 ;输出code2,即处于消暗的代码
MOV port5,a
;;;;;;;;;;;;;;;;;;;;;;;;;;;*/
;龙图开发网 http://www.longtoo.com 原创,转载请注明出处
intext21:
jbs code,7 ;判断是渐亮还时渐灭
jmp intext22 ;这里是亮度变化趋势区分点
MOV a,tcount1 ;code,7为1,则亮度渐亮
MOV temp,a
intext23:
call delay100u ;这是个定长廷时子程序,如能用定时器会更好
,那有可能利于加上按健功能
djz temp
jmp intext23
MOV a,code ;输出已准备好的代码
MOV port5,a ;
jmp intend
intext22:
MOV a,tcount1 ;亮度为渐暗
add a,@91 ;与160对应产生不过0的廷时
MOV temp,a
com temp ;得到渐暗方式的代码
intext24:
call delay100u
djz temp
jmp intext24
MOV a,code
MOV port5,a
call delay100u
call delay100u
intend:
MOV a,a_temp
clr isr ;这一指令不能少
reti
;;;;;;;;;;;;;;;;;;;;;;;;;;;
spmode1:
add pc,a
retl 10
retl 10
retl 20
retl 30
retl 60
tbmode1: ;跑马1的
add pc,a
retl 0b00000000 ;4
retl 0b00001000
retl 0b00000100
retl 0b00000010
retl 0b00000001
tbmode2:
add pc,a
retl 0b00000000 ;32
retl 0b00000001
retl 0b00000001
retl 0b00001001
retl 0b00001101
retl 0b00001111
retl 0b00001111
retl 0b00001110
retl 0b00000110
retl 0b00000010
retl 0b00000010
retl 0b00000011
retl 0b00001011
retl 0b00001111
retl 0b00001111
retl 0b00001101
retl 0b00001100
retl 0b00000100
retl 0b00000100
retl 0b00000110
retl 0b00000111
retl 0b00001111
retl 0b00001111
retl 0b00001011
retl 0b00001001
retl 0b00001000
retl 0b00001000
retl 0b00001100
retl 0b00001110
retl 0b00001111
retl 0b00001111
retl 0b00000111
retl 0b00000011
retl 0b00000001
spmode4:
add pc,a
retl 1
retl 1
retl 1
retl 1
retl 1
tbmode3:
add pc,a
retl 0b00000000 ;8
retl 0b00001100
retl 0b10001100
retl 0b00000110
retl 0b10000110
retl 0b00000011
retl 0b10000011
retl 0b00001001
retl 0b10001001
tbmode4:
add pc,a
retl 0b00000000 ;6
retl 0b00001111
retl 0b10001111
retl 0b00000000
retl 0b00001111
retl 0b10001111
tbmode5:
add pc,a
retl 0b00000000
retl 0b00001001
retl 0b00000011
retl 0b00000110
retl 0b00001100
retl 0b00001001
retl 0b00000011
retl 0b00000110
retl 0b00000011
retl 0b00001001
retl 0b00001100
retl 0b00000110
retl 0b00000011
;龙图开发网 http://www.longtoo.com 原创,转载请注明出处
org 0x100
main:
clr lamp
MOV a,@0xf0 ;设置PORT5
iow ioc5
clr port5
MOV a,@0xf0
iow iocb
MOV a,@0b11111101 ;设置PORT6.
iow ioc6
MOV a,@0x02 ;P6口上拉
iow iocd
MOV a,port6 ;读入P6口的拔码开关值
nop
MOV a,port6
MOV spcode,a
rlc spcode ;把高2位左移到低2位
rlc spcode
rlc spcode
MOV a,@0x03 ;屏蔽高6位
and spcode,a ;保存速度代码,这个代码是公用的
init:
MOV a,@04 ;开外部中断
iow iocf
MOV a,@0x40
iow ioce
eni ;开总中断
;jmp mode4
;;;;;;;;;;;;;;;;;;;;;;;;;;
;跑马1,单灯跑马
;;;;;;;;;;;;;;;;;;;;;;;;;;
mode1:
clr ifdrim
MOV a,@10+5
MOV count2,a ;COUNT2决定这一模式总循环次数
MOV a,spcode ;根据开关代码查到它对应的值
call spmode1
MOV tick,a ;这里可以省去tick2了,40/80/120/160
mode13:
bc stflag,0 ;表示不梦幻
MOV a,@04
MOV chtb,a
mode12:
MOV a,chtb
call tbmode1 ;跑马1的代码表。
MOV code,a
bc stflag,7 ;让查表标志清0
MOV a,tick ;在中断子程序中也有这一句
MOV tcount1,a
mode10:
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
jbs stflag,7 ;判断是否要进行查表
jmp mode10 ;tcountl若为0则进入下一拍
djz chtb
jmp mode12
djz count2
jmp mode13
;;;;;;;;;;;;;;;;;;;;;;;;;;
;跑马2
;;;;;;;;;;;;;;;;;;;;;;;;;;;;
mode2:
clr ifdrim
MOV a,@4
MOV count2,a ;决定这一模式总循环次数
MOV a,spcode ;根据开关代码查到它对应的值
call spmode1
MOV tick,a ;这里可以省去tick2了,40/80/120/160
mode23:
bc stflag,0 ;表示不梦幻
MOV a,@32
MOV chtb,a
mode22:
MOV a,chtb
call tbmode2
MOV code,a
bc stflag,7 ;让查表标志清0
MOV a,tick ;在中断子程序中也有这一句
MOV tcount1,a
mode20:
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
jbs stflag,7 ;判断是否要进行查表
jmp mode20 ;tcountl若为0则进入下一拍
djz chtb
jmp mode22
djz count2
jmp mode23
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;以下为梦幻模式,只计总时间
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
mode3:
clr ifdrim
com ifdrim ;这是梦幻的标志,它是不变的
MOV a,@5 ;进行的时间
MOV count2,a ;count2决定了该模式的工作时间
MOV a,spcode
call spmode4
MOV tick,a
MOV a,tick ;这个值由开机时决定,为4
MOV tcount2,a ;决定同一亮度级别存在时间,为10ms的倍数
mode33:
MOV a,@8
MOV chtb,a
mode32:
MOV a,chtb
call tbmode3 ;查表tbmode4
MOV code,a ;进入代
bc stflag,7 ;让查表标志清0
MOV a,@160
MOV tcount1,a
mode31:
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
jbs stflag,7
jmp mode31
djz chtb
jmp mode32
djz count2
jmp mode33
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;以下为梦幻模式,只计总时间
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
mode4:
clr ifdrim
com ifdrim ;这是梦幻的标志,它是不变的
MOV a,@4 ;进行的时间
MOV count2,a ;count2决定了该模式的工作时间
; MOV a,spcode
;call spmode4
; MOV tick,a
MOV a,@1 ;这个值由开机时决定,为4
MOV tcount2,a ;决定同一亮度级别存在时间,为10ms的倍数
mode43:
MOV a,@5
MOV chtb,a
mode42:
MOV a,chtb
call tbmode4 ;查表tbmode4
MOV code,a ;进入代
bc stflag,7 ;让查表标志清0
MOV a,@160
MOV tcount1,a
mode41:
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
jbs stflag,7
jmp mode41
djz chtb
jmp mode42
djz count2
jmp mode43
;;;;;;;;;;;;;;;;;;;;;;;;;;
;跑马5
;;;;;;;;;;;;;;;;;;;;;;;;;;;;
mode5:
clr ifdrim
MOV a,@15
MOV count2,a ;决定这一模式总循环次数
MOV a,spcode ;根据开关代码查到它对应的值
call spmode1
MOV tick,a ;这里可以省去tick2了,40/80/120/160
mode53:
bc stflag,0 ;表示不梦幻
MOV a,@12
MOV chtb,a
mode52:
MOV a,chtb
call tbmode5
MOV code,a
bc stflag,7 ;让查表标志清0
MOV a,tick ;在中断子程序中也有这一句
MOV tcount1,a
mode50:
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
jbs stflag,7 ;判断是否要进行查表
jmp mode50 ;tcountl若为0则进入下一拍
djz chtb
jmp mode52
djz count2
jmp mode53
jmp mode1
;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;延时子程序
;;;;;;;;;;;;;;;;;;;;;;;;;;;;
delay100u:
MOV a,@10
MOV temp2,a
nop
nop
nop
nop
nop
nop
delay100:
nop
nop
nop
nop
nop
nop
djz temp2
jmp delay100 ;循环体内定时4US,当F=4MHz,D=2
ret
下一篇:LED跳机控制程序
史海拾趣
|
最近在研究一块板子,就是用书上说的tftp、nfs之类的方法,现在把文件系统已经移到了SD卡上,但板子加电启动的时候中间还是要经过漫长的一段过程……最后再找SD卡挂载上面得fs…… Sending DHCP requests ...eth0: no IPv6 routers present ... t ...… 查看全部问答> |
|
有谁在 vista x64 下 安装过 passthru 驱动的,来指点下 我使用微软提供的 WDK 6000 bindview 程序(超级用户权限, X64的版本)在 vista x64 下安装 passthru 驱动 发现,只有使用 pncClassSetup->SelectAndInstall 方法才能反复安装成功, pncClassSetup->Install 只能在没安装过 自己驱动的机器上安装 ...… 查看全部问答> |
|
如题,选用的是Altera的Cyclone芯片,具体型号是EP1C12,有点搞不清楚IO输出电平,看资料好像有LVTTL,LVCMOS等形式的,我的电路输出接口要求是用OC门输出,打算加入一篇74LS06或者74LS04,但是不知道输入的电平是否匹配。 有人用过FPGA输出OC门么 ...… 查看全部问答> |
|
如果不是宽字符可以用长度辨别 但是在宽字符下不管是中文还是英文都是 长度都是1 这个怎么辨别是中文呢? 还有 如果我要出字符串中搜索到是否含有某个汉字 这个是通过怎么搜呢? 我在 edit控件中输入 方 然后把这个方放入wchar_t *st ...… 查看全部问答> |
|
wince 5/6能访问asp的商务网站么?有可能么? 我想在以下的开发板上跑wince 5或6,做商务网站客户端 通过有线或无线网卡浏览asp的商务网站可行不? 硬件平台: arm 2410 sdram &nb ...… 查看全部问答> |
|
如题,EPIAddressMapSetEPIConfigSDRAMSetEPIAddressMapSet这些函数的使用说明找不到啊。请有的兄弟给分享下。先谢过了。… 查看全部问答> |
|
小弟我虚心请教,跪求各位高手解答!在线等!!!!!!! 在线等!!!!!!! 小弟我虚心请教,跪求各位高手解答。我想用单片机实现电压的转换。大致要求如下: 输出端有2个:x和y. 输入端为p1到p9. p1,p2,p3为一组,p4,p5,p6为一组,p7,p8,p9为一组。p1端输入5v电压时,x端输出5v,y端输出0v;p3端输入5v时,x端输 ...… 查看全部问答> |




