历史上的今天
今天是: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
上一篇:简化版LED烟花灯汇编源代码
下一篇:74HC595走马灯演示程序
史海拾趣
|
现在挂一个DS18B20可以读取温度并显示出来,挺简单的。 但挂两个不太清楚怎么做了,看很多人说要先一个一个的挂上,编一个ROM()程序读出序列号,然后再怎么怎么。 读序列号这一步不是很清楚具体是怎么弄,怎么读,读出来在哪看到,得到序列号后 ...… 查看全部问答> |
|
刚开始学习单片机时,需要一个开发板,对开发板上的元器件我们要有一个基本的了解,才能好好的进一步学习如何编写程序,现在给大家分享一个开发板常用芯片的资料,希望大家好好学习,天天向上… 查看全部问答> |
|
【独家推出】详述linux-2.6.33内核在飞凌2440开发板的移植 【独家推出】详述linux-2.6.33内核在飞凌2440开发板的移植 正如飞凌承诺,我们将为嵌入式开发爱好者提供最新最全的嵌入式操作系统移植及相关的开源代码 本文转引自飞凌BBS:http://bbs.witech.com.cn/thread-468-1-1.html 宿主机:u ...… 查看全部问答> |
|
hardware: EPIA CN (IVA)的板子(X86) wince: 5.0. 用USBOOT工具制作的USB HDD 启动盘, (CMOS设置为USB HDD启动)上电检测硬件后出现 verifying DMI Pool Data… 信息,然后停在这里. 这个原因是什么啊? (可以找到U 盘)… 查看全部问答> |
|
你好!我最近在做毕业设计,是有关嵌入式移动数据库的!我想实现的是 移动设备与服务器之间数据库的交互!用的是sql server ce2.0 与sql server2000,因没有设备想用模拟器来实现!遇到的问题是怎样在 模拟 器上安装sql server ce???谢谢回 ...… 查看全部问答> |
|
failed to match ....using unique identifier. 自己画了元件和封装后,出现了RT的警告,据说是因为原理图和封装ID不匹配,但是不清楚到底怎样才能纠正过来? 那位大神指导一下,感激不尽!!! [ 本帖最后由 silentstorm321f 于 2010-8-21 19:09 编辑 ]… 查看全部问答> |




