历史上的今天
返回首页

历史上的今天

今天是:2025年12月21日(星期日)

2022年12月21日 | 大功率轮廓灯跳机同步2回路源程序

2022-12-21 来源:zhihu

;*****************************************

; 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

;;;;;;;;;;;;;;;;;;;;;;;;

;中断计数子程序

;;;;;;;;;;;;;;;;;;;;;;;;

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

;;;;;;;;;;;;;;;;;;;;;;;;;;;*/

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:

add pc,a

retl 0b00000000 ;2

retl 0b00000010

retl 0b00000001

tbmode2:

add pc,a

retl 0b00000000 ;3


retl 0b00000010

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 0b00000011

retl 0b10000011

retl 0b00000010

retl 0b10000010

retl 0b00000011

retl 0b10000011

retl 0b00000001

retl 0b10000001

tbmode4:

add pc,a

retl 0b00000000 ;6

retl 0b00000011

retl 0b10000011

retl 0b00000000

retl 0b00000011

retl 0b10000011


tbmode5:

add pc,a

retl 0b00000000

retl 0b00000000

retl 0b00000011

retl 0b00000000

retl 0b00000011

retl 0b00000000

retl 0b00000011

retl 0b00000000

retl 0b00000011

retl 0b00000000

retl 0b00000011

retl 0b00000000

retl 0b00000011


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,@15

mov count2,a ;决定这一模式总循环次数

mov a,spcode ;根据开关代码查到它对应的值

call spmode1

mov tick,a ;这里可以省去tick2了,40/80/120/160

mode13:

bc stflag,0 ;表示不梦幻

mov a,@02

mov chtb,a

mode12:

mov a,chtb

call tbmode1

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,@3

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,@5 ;进行的时间

mov count2,a ;count2决定了该模式的工作时间

;mov a,spcode

;call spmode4

;mov tick,a

mov a,@3 ;这个值由开机时决定,为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

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

end


推荐阅读

史海拾趣

Eris Technology Corp公司的发展小趣事

面对日益激烈的国际竞争,Eris Tech开始实施全球化战略。公司通过在海外设立研发中心、生产基地和销售网络,加强与国际市场的联系和合作。同时,Eris Tech还积极参与国际标准的制定和技术交流活动,提高了公司的国际影响力和竞争力。随着全球化战略的深入实施,Eris Tech的产品已经远销全球多个国家和地区。

Carroll & Meynell Transformers Ltd公司的发展小趣事

在电子行业的初期,Carroll & Meynell Transformers Ltd公司以其卓越的技术创新能力脱颖而出。公司研发团队不断突破传统变压器的设计局限,推出了一系列高效、稳定的变压器产品。这些产品不仅满足了当时市场对电力传输和分配的基本需求,还以其卓越的性能赢得了客户的广泛认可。随着市场需求的不断增长,公司逐渐扩大了生产规模,成为了电子行业中的佼佼者。

Actel公司的发展小趣事

在电子行业的初期,Carroll & Meynell Transformers Ltd公司以其卓越的技术创新能力脱颖而出。公司研发团队不断突破传统变压器的设计局限,推出了一系列高效、稳定的变压器产品。这些产品不仅满足了当时市场对电力传输和分配的基本需求,还以其卓越的性能赢得了客户的广泛认可。随着市场需求的不断增长,公司逐渐扩大了生产规模,成为了电子行业中的佼佼者。

飞虹(FeiHong)公司的发展小趣事

在稳步发展的同时,苏州锋驰也积极拓展对外合作与投资。公司共对外投资了3家企业,并通过这些投资进一步拓宽了业务范围和市场渠道。这些合作不仅为苏州锋驰带来了更多的技术资源和市场机会,也增强了公司的综合竞争力。同时,公司还积极与上下游企业建立紧密的合作关系,形成了良好的产业生态。

Cables To Go公司的发展小趣事

在电子行业的激烈竞争中,Cables To Go公司以其卓越的产品品质和创新精神脱颖而出。公司从成立之初就注重产品研发,不断推出符合市场需求的高品质线缆产品。通过严格把控原材料采购和制造工艺,Cables To Go确保了每一根线缆都具备出色的性能和稳定性。同时,公司还积极投入研发,推出了一系列具有创新性的线缆解决方案,满足了客户多样化的需求。

FCT electronic公司的发展小趣事

随着技术的不断成熟和市场需求的增长,FCT electronic公司开始寻求市场扩张和多元化发展。公司决定将产品线拓展至刚挠结合板和挠性加热器领域,以满足不同客户的需求。同时,FCT electronic公司还积极开拓国际市场,通过参加国际展览、与海外企业合作等方式,逐渐在全球电子行业中树立了品牌形象。

问答坊 | AI 解惑

小弟欲求ASM AB339的中文操作手册

小弟欲求ASM AB339的中文操作手册,请大侠赐afan6092@163.com…

查看全部问答>

触发器综合问题

module register         #(parameter     Width=8)          (output reg [Width-1:0] out,           input    ...…

查看全部问答>

CE60下调试RIL怎么算是调试成功了?用什么标准来衡量?TAPI/SIM/SMS的那些API可以正常使用算不算?

CE60下调试RIL怎么算是调试成功了?用什么标准来衡量?TAPI/SIM/SMS的那些API可以正常使用算不算?…

查看全部问答>

学习wifi有哪些经典的入门书籍?

  小弟是个菜鸟,最近要用到wince下的wifi编程,请高手们指点,推荐几本入门书籍!…

查看全部问答>

帮忙推荐一款6410 irom启动方式的 nand烧写器

如题:帮忙推荐一款6410 irom启动方式的 nand烧写器。好像是要专用的烧写器,但是我在网上查不到。谢谢推荐…

查看全部问答>

请问:BSL文件时什么文件

请问我的430编程器LST-PRGS430-IIIA ,我在读出程序时让输入BSL密码文件,这个密码文件是什么啊? 谢谢!…

查看全部问答>

【玩转ADuCM360】 自己做的ADuCM360 ADC初始化程序-----芯片由VOCO_2000网友提供

测量电压已基本正常,ADC可以正常工作了,连续模式。 1、将ADI的ADUCM360的头文件中,凡是加了“ADI_”的,都去掉了。觉得烦人, 2、原来使用ADI提供的函数,觉得不明了,调用需要一至两层,需要压栈什么的。所以就直接使用它定义的结构体了,简 ...…

查看全部问答>

求助,呜呼呼,弄好久了,关于LCD5110的初始化

,不知道亲们,有谁试过LCD啊,我用Hercules的板子驱动LCD5110失败阿,是不是GIO有什么设置我没弄啊,求指导啊…

查看全部问答>

新兴市场、室内定位和广告提振基于移动位置服务市场

Strategy Analytics移动互联网 (WMS)战略服务发布最新研究报告《新兴市场、室内定位和移动广告推动未来移动LBS市场增长》指出,破除在新兴市场采用基于位置服务(LBS)的障碍,并结合室内LBS和移动广告的势头,将推动未来移动LBS的增长。 配备GP ...…

查看全部问答>

晒WEBENCH设计的过程+太阳能电池降压电路设计

用WEBENCH设计一款太阳能电池降压电路,刚开始选择的输出电流太小0.1A,没有设计方案,后面将电流改为1A后就有了相应电路设计,如下: …

查看全部问答>