一个用来测试avr-gcc的数字移位实验,采用avr-gcc编写
在hjavr上调试通过。
;*****************************************
;这是数字移位显示实验,
;程序运行的结果
;8个数码关循环显示"1" - "f","1." - "f."
;此外,本程序好用到了hj1.asm中的延时程序
;代码在hjavr学习开发系统上测试通过
;*****************************************
.include"8515def.inc"
;包含文件要和"器件支持"相一致,否则可能出错
.org 0x00
rjmp main
.org 0x10
main:ldi r17,high(RAMEND)
out SPH,r17 ;设置堆栈高位
ldi r17,low(RAMEND)
out SPL,r17 ;设置堆栈低位
ldi r17,0xff ;设置端口方向为输出
out ddra,r17
out ddrc,r17
out ddrd,r17
ldi r17,0 ;数据
out portd,r17
lf: ldi r16,0x01 ;位选
lp: push r16
ldi r16,0xcf ;延时参数
rcall delay
pop r16
rcall disprsg ;调用显示输出子程序
inc r17
rol r16 ;移位显示
brcs lf ;如果进位标志被设置重新执行循环
cpi r17,$1f ;否则顺序执行,检查显示数据
brne lp ;是否完成,如果没有完成继续循环
rjmp main ;否则,程序重新执行
; ********** 数码显示子程序
disprsg:
out porta,r16
ldi zh,high(tab_nu*2)
clr zl
add zl,r17
lpm
out portc,r0
ret
; ********* 延时子程序
delay: push r16 ;延时程序
l1: push r16
l2: dec r16
brne l2
pop r16
dec r16
brne l1
pop r16
dec r16
brne delay
ret
; ****************************************
; 这是数字显示表格,其中 带小数点的数字比不带小数点的数字大16
; 比如 0 的显示代码为 0;那么 0.的显示代码为 16;如此类推
.org 0x80
tab_nu: .db 0xc0 ,0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82,0xf8 ; number 0 to 7 no dp..
.db 0x80 ,0x90, 0x88, 0x83, 0xc6, 0xa1, 0x86,0x8e ; number 8 to f no dp..
.db 0x40 ,0x79, 0x24, 0x30, 0x19, 0x12, 0x02,0x78 ; number 0 to 7 with dp..
.db 0x00 ,0x10, 0x08, 0x03, 0x46, 0x21, 0x06,0x0e ; number 8 to f with dp..
.db 0x00 ,0x00,采用avr-gcc编写
在hjavr上调试通过。
;*****************************************
;这是数字移位显示实验,
;程序运行的结果
;8个数码关循环显示"1" - "f","1." - "f."
;此外,本程序好用到了hj1.asm中的延时程序
;代码在hjavr学习开发系统上测试通过
;*****************************************
.include"8515def.inc"
;包含文件要和"器件支持"相一致,否则可能出错
.org 0x00
rjmp main
.org 0x10
main:ldi r17,high(RAMEND)
out SPH,r17 ;设置堆栈高位
ldi r17,low(RAMEND)
out SPL,r17 ;设置堆栈低位
ldi r17,0xff ;设置端口方向为输出
out ddra,r17
out ddrc,r17
out ddrd,r17
ldi r17,0 ;数据
out portd,r17
lf: ldi r16,0x01 ;位选
lp: push r16
ldi r16,0xcf ;延时参数
rcall delay
pop r16
rcall disprsg ;调用显示输出子程序
inc r17
rol r16 ;移位显示
brcs lf ;如果进位标志被设置重新执行循环
cpi r17,$1f ;否则顺序执行,检查显示数据
brne lp ;是否完成,如果没有完成继续循环
rjmp main ;否则,程序重新执行
; ********** 数码显示子程序
disprsg:
out porta,r16
ldi zh,high(tab_nu*2)
clr zl
add zl,r17
lpm
out portc,r0
ret
; ********* 延时子程序
delay: push r16 ;延时程序
l1: push r16
l2: dec r16
brne l2
pop r16
dec r16
brne l1
pop r16
dec r16
brne delay
ret
; ****************************************
; 这是数字显示表格,其中 带小数点的数字比不带小数点的数字大16
; 比如 0 的显示代码为 0;那么 0.的显示代码为 16;如此类推
.org 0x80
tab_nu: .db 0xc0 ,0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82,0xf8 ; number 0 to 7 no dp..
.db 0x80 ,0x90, 0x88, 0x83, 0xc6, 0xa1, 0x86,0x8e ; number 8 to f no dp..
.db 0x40 ,0x79, 0x24, 0x30, 0x19, 0x12, 0x02,0x78 ; number 0 to 7 with dp..
.db 0x00 ,0x10, 0x08, 0x03, 0x46, 0x21, 0x06,0x0e ; number 8 to f with dp..
.db 0x00 ,0x00
*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。