📄 90keya.asm
字号:
; Pc.4--cs
; Pc.3--clk
; Pc.2--data
; Pc.1--key
.macro setcs
sbi portc, cs
.endm
.macro datainput
cbi ddrc, data
.endm
.macro dataoutput
sbi ddrc, data
.endm
.include"d:\wu\8515def.inc"
rjmp reset
.def temp = r16
.def cnt = r17
.def send_buff = r18
.def rec_buff = r19
.def delayr = r20
.equ cs = 4
.equ clk = 3
.equ data= 2
.equ key = 1
reset:
ldi temp, high(ramend) ;设堆栈
out sph, temp
ldi temp, low(ramend)
out spl, temp ;初始化
ldi temp, $fd
out ddrc, temp
ldi temp, $f7
out portc, temp
main:
ldi send_buff,$a4 ;清屏
rcall send
setcs
wait:
sbic pinc, key
rjmp wait
ldi send_buff,0x15 ;接收键盘键值
rcall send
rcall receive
setcs
ldi delayr, 15
rcall delay
ldi send_buff,0xc8 ;送键值显示
rcall send
mov send_buff,rec_buff
rcall send
setcs
wait1:
sbis pinc, key
rjmp wait1
rjmp wait
send: ;发送子程序
ldi cnt, 8
cbi portc, cs
ldi delayr, 50 ;delay 50us
rcall delay
; cbi portc, clk
ldi delayr, 10 ;delay 10us
send1:
lsl send_buff
brcs sset1
sset0:
cbi portc, data
rjmp snext1
sset1:
sbi portc, data
snext1:
nop
nop
sbi portc, clk
rcall delay
nop
nop
cbi portc, clk
rcall delay
dec cnt
brne send1
cbi portc, data
ret
receive: ;接收子程序
ldi cnt, 8
datainput
ldi delayr, 50
rcall delay
ldi delayr, 10
receive1:
sbi portc, clk
rcall delay
sbis pinc, data
rjmp rset0
rjmp rset1
rset0:
clc
rjmp rnext
rset1:
sec
rnext:
rol rec_buff
cbi portc, clk
rcall delay
dec cnt
brne receive1
dataoutput
ret
delay: ;延时子程序
dec delayr
brne delay
ret
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -