历史上的今天
返回首页

历史上的今天

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

2022年12月21日 | LED游泳池灯源程序

2022-12-21 来源:zhihu

indr == 0x00

tcc == 0x01

pc == 0x02

status == 0x03

r3 == 0x03

c == 0

dc == 1

z == 2

p == 3

t == 4

ps0 == 5

ps1 == 6

rst == 7

;;

rsr == 0x04

port5 == 0x05

b1_pin == 0

b_pin == 1

g_pin == 2

r_pin == 3

;

port6 == 0x06

g1_pin == 7

sda == 2

sck == 1

;;

;;INTERRUPT STATUS REGISTER

rf == 0x0f;;INTERRUPT STATUS REGISTER

tcif == 0;;TCC TIMER OVERFLOW INTERRUPT FLAG,0->DISABLE

;;SET WHEN TCC TIMER OVERFLOW,RESET IN SOFTWARE

icif == 1;;PORT INPUT CHANGE INTERRUPT FLAG,0->DISABLE

;;SET WHEN PORT6 INPUT CHANGES,RESET IN SOFTWARE

exif == 2;;EXTERNAL INTERRUPT FLAG,0->DISABLE

;;SET BY FALLING EDGE ON /INT,RESET IN SOFTWARE

;;BIT3-BIT7 NOT USE

;;

;;CONT ==@0B--------;;CONTROL REGISTER

;;BIT0-BIT2 TCC/WDT PRESCALER BITS

;;PSR2 PSR1 PSR0 TCC RATE WDT RATE

;; 0 0 0 1 : 2 1 : 1

;; 0 0 1 1 : 4 1 : 2

;; 0 1 0 1 : 8 1 : 4

;; . . . . .

;; . . . . .

;; 1 1 1 1 :256 1 :128

pab == 3;;PRESCALE ASSIGNMENT BIT

;;0->TCC

;;1->WDT

te == 4;;TCC SIGNAL EDGE

;;0->LOW TO HIGH ADD TCC

;;1->HIGH TO LOW ADD TCC

ts == 5;;TCC SIGNAL SOURCE

;;0->INTERNAL INSTRUCTION CYCLE CLOCK

;;1->TRANSITION ON TCC PIN

;;/INT == 6;;INTERRUPT ENABLE FLAG

;;0->MASKED BY DISI OR HARDWARE INTERRUPT

;;1->ENABLE BY ENI/RETI INSTRUCTION

;;BIT7 NOT USE

;;I/O PORT CONTROL REGISTER

ioc5 == 0x05;;I/O PORT CONTROL REGISTER

;;0->OUTPUT PORT,1->INPUT PORT

ioc6 == 0x06;;I/O PORT CONTROL REGISTER

;;0->OUTPUT PORT,1->INPUT PORT

;;PULL DOWN CONTROL REGISTER

iocb == 0x0b;;0->ENABLE 1->DISABLE

;;7 6 5 4 3 2 1 0

;; P62 P61 P60 P52 P51 P50

;;OPEN DRAIN CONTROL REGISTER

iocc == 0x0c;;0->DISABLE 1->ENABLE

;;7 6 5 4 3 2 1 0

;;P67 P66 P65 P64 P62 P61 P60

;;PULL HIGH CONTROL REGISTER

iocd == 0x0d;;0->ENABLE 1->DISABLE

;;7 6 5 4 3 2 1 0

;;P67 P66 P65 P64 P62 P61 P60

;;WDT CONTROL REGISTER

ioce == 0x0e;;WDT CONTROL REGISTER

;;BIT7-->ENABLE WATCHDOG TIME

;;0->DISABLE,1->ENABLE

;;BIT6->DEFINE THE FUNCTION OF P60(INT)PIN

;;0->I/O PIN,1->INT PIN

;;BIT0-BIT5 NOT USE

;;INTERRUPT MASK REGISTER

iocf == 0x0f;;INTERRUPT MASK REGISTER

tcie == 0;;TCIF INTERRUPT ENABLE BIT

;;0->DISABLE

;;1->ENABLE

icie == 1;;ICIF INTERRUPT ENABLE BIT

;;0->DISABLE

;;1->ENABLE

exie == 2;;EXIF INTERRUPT ENABLE BIT

;;0->DISABLE

;;1->ENABLE

;;BIT3-BIT7 NOT USED

;============================================================

;===RAM AND FLAG DEFINE======================================

icflag == 0x10

do == 0


;

txbuf == 0x11

rxbuf == 0x12

cnt == 0x13

num == 0x14 ;

addr == 0x15

;

a_buf == 0x16

r3_buf == 0x17

;

flag == 0x18

time_bit0 == 0

time_bit1 == 1

time_bit2 == 2

time_bit3 == 3

time_bit4 == 4

time_bit5 == 5

time_bit6 == 6

time_bit7 == 7

;

iccounter == 0x19

;

color_loop == 0x1b

key_loop == 0x1c

;

loop_counter == 0x1e;

loop_counter1 == 0x1f

;

sfr_addr == 0x20

sfw_addr == 0x21

;

loop_counter3 == 0x22

loop_counter4 == 0x23

;

color_loop1 == 0x24

color_loop2 == 0x25

loop_counter7 == 0x26

;===========================================================

;===CONST DEFINE============================================

data_tcc == 0d235

;============================================================

;==============主程序清单=====================================

;============================================================

;============================================================

org 0x00

jmp start

;

org 0x08

jmp time

;

org 0x30


;======================================================

;============启动信号========================================

tx_start: mov a,@0b01111001

iow ioc6

nop

bs port6,sda

bs port6,sck

call icdelay

bc port6,sda

call icdelay

bc port6,sck

ret

;

;======================================================

;======================================================

;===============停止信号===============================

tx_stop: mov a,@0b01111001

iow ioc6

nop

bc port6,sda

bs port6,sck

call icdelay

bs port6,sda

call icdelay

bc port6,sda

bc port6,sck

ret

;

;======================================================

;======================================================

;===========发应答信号======================================

mack: mov a,@0b01111001

iow ioc6

nop

bc port6,sda

bs port6,sck

call icdelay

bc port6,sck

bs port6,sda

ret

;

;==========================================================

;==========发非应答信号=====================================

mnack: mov a,@0b01111001

iow ioc6

nop

bs port6,sda

bs port6,sck

call icdelay

bc port6,sda

bc port6,sck

ret

;


;==========================================================

;======================================================

;===向I2C写N字节,I2C首地址存于ADDR中,源数据的起始地址===

;===指针在ACC中========================================

;======================================================

wrnbyte: clr icflag

mov rsr,a ;源数据地址送R4中

mov a,@0xa0

mov txbuf,a

call tx_start

call tx

mov a,addr

mov txbuf,a

call tx

;

wrloop: mov a,indr

mov txbuf,a

call tx

inc rsr

djz num

jmp wrloop

call tx_stop

ret

;

;============================================================

;===从I2C读N字节,待读出的起始地址ADDR中,读出的数据存在以ACC===

;===为起始地址指针的寄存器中===================================

;=============================================================

rdnbyte: clr icflag

mov rsr,a ;目标地址送R4中

mov a,@0xa0

mov txbuf,a

call tx_start

call tx

mov a,addr

mov txbuf,a

call tx

call tx_start

mov a,@0xa1

mov txbuf,a

call tx

;

rdloop: call rx

mov a,rxbuf

mov indr,a

inc rsr

djz num

call mack

call mnack

call tx_stop

ret

;

;=========================================================

;===发送一个字节子程序=====================================

;=========================================================

tx: mov a,@8

mov cnt,a

;

txlp: bc icflag,do

jbs txbuf,7

jmp txlp1

jmp txlp2

;

txlp1: bc icflag,do

jmp txlp3

;

txlp2: bs icflag,do

;

txlp3: mov a,@0b01111001

iow ioc6

nop

jbs icflag,do

jmp tx0

bs port6,sda

jmp tx1

;

tx0: bc port6,sda

;

tx1: bs port6,sck

call icdelay

bc port6,sck

rlc txbuf

djz cnt

jmp txlp

;

;

mov a,@0b01111101

iow ioc6

nop

nop

;

ack: nop

bc port6,sck

call icdelay

bs port6,sck

call icdelay

jbc port6,sda

jmp ack

bc port6,sck

ret

;

;============================================================

;===读一个字节的子程序========================================

;============================================================

rx: mov a,@8

mov cnt,a

clr rxbuf

mov a,@0b01111101

iow ioc6

nop

rxlp: bs port6,sck

bc status,c

call icdelay

jbc port6,sda

bs status,c

rlc rxbuf

bc port6,sck

djz cnt

jmp rxlp

ret

;

;=================================================

icdelay mov a,@1

mov iccounter,a

djz iccounter

jmp $-1

ret

;

;===============以下进入定时中断程序=====================================

;

time: mov a_buf,a ;压栈保护

swap a_buf

swapa r3

mov r3_buf,a

;

jbs rf,exif ;检测外部中断

jmp tccint

jmp exint ;检测到外部中断信号

;

;================================================================

exint: bc rf,exif ;清外部中断标志位

;

mov a,key_loop

xor a,@0x0b

jbs status,z

jmp exint_03

;

jbc flag,time_bit7

jmp exint_1_1

jmp exint_2_1

;

exint_1_1: inc loop_counter7

mov a,loop_counter7

xor a,@255

jbs status,z

jmp exint_3

;

bc flag,time_bit7

;

inc color_loop

mov a,color_loop

xor a,@0x0e

jbs status,z

jmp exint_3

;

mov a,@1

mov color_loop,a

;

jmp exint_3

;

exint_2_1: dec loop_counter7

mov a,loop_counter7

xor a,@30

jbs status,z

jmp exint_3

;

bs flag,time_bit7

;

jmp exint_3

;

;----------------------------------------------

exint_03: mov a,key_loop

xor a,@0x0a

jbs status,z

jmp exint_02

;

jbc flag,time_bit7

jmp exint_1

jmp exint_2

;

exint_1: inc loop_counter7

mov a,loop_counter7

xor a,@255

jbs status,z

jmp exint_3

;

bc flag,time_bit7

;

inc color_loop

mov a,color_loop

xor a,@8

jbs status,z

jmp exint_3

;

mov a,@1

mov color_loop,a

;

jmp exint_3

;

exint_2: dec loop_counter7

mov a,loop_counter7

xor a,@30

jbs status,z

jmp exint_3

;

bs flag,time_bit7

;

jmp exint_3

;

;--------------------------------------------

exint_02: mov a,key_loop

xor a,@8

jbs status,z

jmp exint_00

;

inc loop_counter

;

jmp exint_3

;

;--------------------------------------------

exint_00: mov a,key_loop

xor a,@9

jbs status,z

jmp exint_01

;

inc loop_counter

;

jmp exint_3

;

;---------------------------------------------

exint_01: mov a,key_loop

xor a,@1

jbs status,z

jmp exint_10

;

mov a,@1

mov color_loop,a

call color_sel

;

jmp exint_end

;

exint_10: mov a,key_loop

xor a,@2

jbs status,z

jmp exint_20

;

mov a,@2

mov color_loop,a

call color_sel

;

jmp exint_end

;

exint_20: mov a,key_loop

xor a,@3

jbs status,z

jmp exint_30

;

mov a,@3

mov color_loop,a

call color_sel

;

jmp exint_end

;

exint_30: mov a,key_loop

xor a,@4

jbs status,z

jmp exint_40

;

mov a,@4

mov color_loop,a

call color_sel

;

jmp exint_end

;

exint_40: mov a,key_loop

xor a,@5

jbs status,z

jmp exint_50

;

mov a,@5

mov color_loop,a

call color_sel

;

jmp exint_end

;

exint_50: mov a,key_loop

xor a,@6

jbs status,z

jmp exint_60

;

mov a,@6

mov color_loop,a

call color_sel

;

jmp exint_end

;

exint_60: mov a,key_loop

xor a,@7

jbs status,z

jmp exint_end

;

mov a,@7

mov color_loop,a

call color_sel

;

jmp exint_end

;

;-----------------------------------------------

exint_3: mov a,@data_tcc ;给定时器送初值

mov tcc,a

bc rf,tcif

;

mov a,@5 ;起动定时器中断和外部中断

iow iocf

;

;-----------------------------------------------------------------

exint_end: swapa r3_buf ;

mov r3,a

swapa a_buf

reti

;

;==============================================================

tccint: mov a,key_loop

xor a,@8

jbs status,z

jmp check_ninth

;

call color_sel

;

mov a,loop_counter

xor a,@100

jbs status,z

jmp eight_1

;

clr loop_counter

;

inc color_loop

;

mov a,color_loop

xor a,@8

jbs status,z

jmp eight_1

;

mov a,@1

mov color_loop,a

;

eight_1: mov a,@4 ;起动定时器中断和外部中断

iow iocf

;

jmp tccint_end

;=============================================================

check_ninth: mov a,key_loop

xor a,@9

jbs status,z

jmp check_tenth

;

jbs flag,time_bit0

jmp ninth_1

jmp ninth_2

;

ninth_1: call color_sel

mov a,loop_counter

xor a,@3

jbs status,z

jmp ninth_3

;

clr loop_counter

bs flag,time_bit0

;

inc loop_counter1

;

mov a,loop_counter1

xor a,@40

jbs status,z

jmp ninth_3

;

clr loop_counter1

;

inc color_loop

;

mov a,color_loop

xor a,@8

jbs status,z

jmp ninth_3

;

mov a,@1

mov color_loop,a

;

jmp ninth_3

;

ninth_2: bc port6,b1_pin

mov a,@0

mov port5,a

;

mov a,loop_counter

xor a,@27

jbs status,z

jmp ninth_3

;

clr loop_counter

;

bc flag,time_bit0

;

jmp ninth_3

;

ninth_3: mov a,@4

iow iocf

;

jmp tccint_end

;=============================================================

check_tenth: mov a,key_loop

xor a,@0x0a

jbs status,z

jmp check_eleth

;

jbs flag,time_bit0

jmp tenth_1

jmp tenth_2

;

tenth_1: call color_sel

;

bs flag,time_bit0

;

mov a,loop_counter7 ;给定时器送初值

mov tcc,a

bc rf,tcif

;

jmp tccint_end

;

tenth_2: bc port5,r_pin

bc port5,g_pin

bc port5,g1_pin

bc port5,b_pin

bc port6,b1_pin

;

bc flag,time_bit0

;

mov a,@4

iow iocf

;

jmp tccint_end

;=============================================================

check_eleth: mov a,key_loop

推荐阅读

史海拾趣

Gemmy Electronics Co Ltd公司的发展小趣事
高压电击式捕鼠器在工作时会产生高压电,操作时必须注意防止触电。非专业人员请勿私自拆卸或维修捕鼠器。
长江微电(cjiang)公司的发展小趣事

随着新能源汽车市场的快速发展,汽车电子领域对电感产品的需求不断增长。长江微电敏锐地捕捉到这一市场机遇,加大了对汽车电子领域的投入力度。公司推出的车规级系列电感产品广泛应用于汽车LED驱动电路、汽车多媒体系统、车联网系统等领域。凭借优异的产品性能和稳定可靠的质量保障,长江微电在汽车电子领域树立了良好的口碑和品牌形象。

贝特莱公司的发展小趣事

在市场竞争日益激烈的背景下,贝特莱注重品牌建设和市场推广。通过不断提升产品质量和创新能力,优化售后服务体系,贝特莱在市场上树立了良好的品牌形象。同时,公司还积极拓展海外市场,参与国际竞争,进一步提升了其在全球电子行业的影响力。

这些故事只是贝特莱在电子行业发展历程中的一部分。作为一个国家级高新技术企业,贝特莱在技术研发、产品创新、市场拓展等方面都取得了显著的成绩。未来,随着电子行业的不断发展,贝特莱将继续保持其创新精神和市场竞争力,为行业的进步做出更大的贡献。

Aerovox Corporation公司的发展小趣事

贝特莱与小米的合作是其发展历程中的又一重要事件。作为小米全系列合作伙伴,贝特莱为米家智能门锁提供了独家指纹传感器和定制算法芯片。随着米家智能门锁销量突破百万大关,贝特莱也实现了销售上的重大突破。这一合作不仅证明了贝特莱技术的成熟与可靠,也进一步提升了其在智能门锁市场的地位。

DS-IMP公司的发展小趣事

DS-IMP公司一直将研发创新作为企业发展的核心动力。在研发过程中,公司不断投入大量资金,引进先进设备和技术,并与国内外知名高校和研究机构建立合作关系。通过不懈努力,公司在多个领域取得了重大突破,成功研发出了一系列具有自主知识产权的高性能模拟混合电路产品。这些产品不仅满足了国内外客户的需求,还为公司赢得了良好的市场声誉。

Crystal Clear Technology公司的发展小趣事

随着公司业务的不断发展,Crystal Clear Technology意识到单凭自身力量难以快速占领市场份额。因此,公司积极寻求与行业内外的合作伙伴建立战略合作关系。通过与知名电子设备制造商的合作,Crystal Clear Technology的显示屏产品得以广泛应用在各种电子设备上,进一步扩大了公司的业务范围和影响力。

问答坊 | AI 解惑

一线挂两个DS18B20读序列号问题

现在挂一个DS18B20可以读取温度并显示出来,挺简单的。 但挂两个不太清楚怎么做了,看很多人说要先一个一个的挂上,编一个ROM()程序读出序列号,然后再怎么怎么。 读序列号这一步不是很清楚具体是怎么弄,怎么读,读出来在哪看到,得到序列号后 ...…

查看全部问答>

51开发板常用芯片pdf资料

刚开始学习单片机时,需要一个开发板,对开发板上的元器件我们要有一个基本的了解,才能好好的进一步学习如何编写程序,现在给大家分享一个开发板常用芯片的资料,希望大家好好学习,天天向上…

查看全部问答>

无线麦克风电路图

无线麦克风电路图??…

查看全部问答>

【独家推出】详述linux-2.6.33内核在飞凌2440开发板的移植

【独家推出】详述linux-2.6.33内核在飞凌2440开发板的移植   正如飞凌承诺,我们将为嵌入式开发爱好者提供最新最全的嵌入式操作系统移植及相关的开源代码 本文转引自飞凌BBS:http://bbs.witech.com.cn/thread-468-1-1.html 宿主机:u ...…

查看全部问答>

verifying DMI Pool Data… 问题

hardware: EPIA CN (IVA)的板子(X86) wince:    5.0. 用USBOOT工具制作的USB HDD 启动盘, (CMOS设置为USB HDD启动)上电检测硬件后出现 verifying DMI Pool Data… 信息,然后停在这里. 这个原因是什么啊? (可以找到U 盘)…

查看全部问答>

音量与增益的问题

在电路上先增益调节,后音量调节 如何寻找一个平衡点,在用耳机听时,使的在调增益的时候,音量在增大;在增益不变的情况下,调节音量,音量也在增大,并且在这个过程中,用耳机听不到类似于自激的现象…

查看全部问答>

如何在模拟器上安装sql server ce???

你好!我最近在做毕业设计,是有关嵌入式移动数据库的!我想实现的是 移动设备与服务器之间数据库的交互!用的是sql server ce2.0 与sql server2000,因没有设备想用模拟器来实现!遇到的问题是怎样在 模拟 器上安装sql server ce???谢谢回 ...…

查看全部问答>

外资公司深圳代表处直聘

招聘职位:1〉WinCE GUI 工程师              岗位职责: 嵌入式Wince上层/GUI软件开发,嵌入式WinCE应用软件开发               职位要求:     ...…

查看全部问答>

failed to match ....using unique identifier.

自己画了元件和封装后,出现了RT的警告,据说是因为原理图和封装ID不匹配,但是不清楚到底怎样才能纠正过来? 那位大神指导一下,感激不尽!!! [ 本帖最后由 silentstorm321f 于 2010-8-21 19:09 编辑 ]…

查看全部问答>