📄 tran.asm
字号:
tran_bit equ p3.2
addr equ 30h
N equ 4
key equ p2.0
green equ p2.2
org 0000h
ljmp main
org 000bh
ljmp t0_sev
org 0030h
/*主函数,调用子函数*/
/**********************************************/
main:call g_data
call ini
loop:clr ea
setb tran_bit
jb key,$
call delay
jb key,loop
setb ea
call tran
clr ea
setb tran_bit
sjmp loop
/**********************************************/
/*初始化函数,用来对上电后51的初始状态进行设置*/
/**********************************************/
ini:mov sp ,#4fh ;设置堆栈
setb key ;将按键的端口设置为输入状态
clr tran_bit ;确定红外发射口的初始状态
anl pcon ,#7fh ;取消波特率倍增位
mov scon ,#50h ;串口工作在模式2
mov tmod ,#22h ;T0/T1都工作在方式2(自重装)
mov tl0 ,#0f4h ;产生40KHz的载波
mov th0 ,#0f4h
mov tl1 ,#0e8h ;波特率1200
mov th1 ,#0e8h
setb et0 ;允许T0中断
setb ea ;开中断
setb tr0 ;启动T0
setb tr1 ;启动T1
ret
/**********************************************/
/*串口发送程序,将数据发出*/
/**********************************************/
tran:mov r0 ,N ;一组命令需要发送的字节数N
mov r1 ,addr ;将数据缓存的首地址给r1
re_tran:mov a ,@r1 ;将数据传给累加器
mov c ,p ;将PSW中的奇偶标志P(为1是奇数)给C
cpl c
mov acc.7,c ;将奇偶标志位加入到要发送的数据中
mov sbuf ,a ;发送数据
jnb ti ,$
clr ti
inc r1 ;缓存地址加一
djnz r0 ,re_tran
ret
/**********************************************/
/*数据的赋值*/
/**********************************************/
g_data:mov (30h),#01h
mov (31h),#02h
mov (32h),#03h
mov (33h),#04h
ret
/*延时去抖动*/
delay:mov r7 ,#0efh
djnz r7 ,$
ret
/*T0中断服务程序,用来产生40KHz的载波*/
/**********************************************/
t0_sev:cpl tran_bit ;取反用来产生40KHz载波
reti
/**********************************************/
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -