您当前的位置:五五电子网电子知识单片机-工控设备AVR单片机AVR双CPU通信程序(异步方式)UART 正文
AVR双CPU通信程序(异步方式)UART

AVR双CPU通信程序(异步方式)UART

点击数:7561 次   录入时间:03-04 11:56:05   整理:http://www.55dianzi.com   AVR单片机
;**************************************** 
;功能:AVR双CPU通信程序,异步方式,类似于UART 
;器件:AT90S2313 
;硬件:主从CPU的PD.2通过上拉电阻连接 
;时钟:4.0MHz  
;**************************************** 
.include"2313def.inc" 

.equ port =PORTD 
.equ PIN =PIND 
.equ ddr =DDRD 
.equ bit =2 
;***************************************** 
;中断向量表 
;***************************************** 
.org 0x000 
rjmp main 
rjmp INT0_isr 
reti 
reti 
reti 
reti 
reti 
reti 
reti 
reti 
;***************************************** 
;程序入口 
;***************************************** 
.org 0x000B 
main: ldi R16,0xDF ;设置堆栈指针 
out spl,R16 

cbi port,bit ;设置端口方向 
cbi ddr,bit 

ldi R16,0x02 ;INT0 下降沿有效 
out MCUCR,R16 
ldi R16,0x40 ;INT0 中断使能 
out GIMSK,R16 

sei ;全局中断使能 

ldi R28,0x60 
ldi R29,0x00 
ldi R22,0x10 

here: ldi R30,0x55 ;测试 
rcall sendbyte 
rjmp here 
;***************************************** 
;过程名:Delay 
;功能:us级别精确延时 
;入口参数:R16 延时时间微秒数-2 
;出口参数:无 
;影响资源: 
;***************************************** 
delay: dec R16 
nop 
brne delay 
nop 
ret 
;***************************************** 
;外部中断INTI0中断服务程序(读数) 
;***************************************** 
INT0_isr: 
ldi R16,0x49 ;延时 75us 
rcall delay 
sbIC pin,bit 
rjmp skip 
clr R30 
rcall readbit ;CLOCk 1 
rcall readbit ;Clock 2 
MOV R31,R30 

ldi R20,0x08 
RNext: rcall readbit ;读数 
dec R20 
brne RNext 

deal: nop ;数据处理,数据存放在R30中,两个时钟信号存在R31 
的高两位 

skip: reti ;非起始信号,跳过 
;***************************************** 
;过程名:readbit 
;功能:从总线上读取一位数据 
;入口参数:无 
;出口参数:R30 
;影响资源:R16 
;***************************************** 
readbit: 
ldi R16,0x08 ;延时10us 
rcall delay 

waitu1: sbis pin,bit ;Wait for "1" 
rjmp waitu1 
waitu2: sbis pin,bit ;Wait for "1" 
rjmp waitu2 
waitu3: sbis pin,bit ;Wait for "1" 
rjmp waitu3 
waitu4: sbis pin,bit ;Wait for "1" 
rjmp waitu4 

waitf1: sbic pin,bit ;Wait for the falling edge 
rjmp waitf1 
waitf2: sbic pin,bit ;Wait for the falling edge 
rjmp waitf2 
waitf3: sbic pin,bit ;Wait for the falling edge 
rjmp waitf3 
waitf4: sbic pin,bit ;Wait for the falling edge 
rjmp waitf4 

ldi R16,0x2B ;延时 45us 
rcall delay 

clc ;清 C 
sbis pin,bit 
sec 

ror R30 ;存数 

ret 
;***************************************** 
;过程名:sendbit 
;功能:传出一位数据 
;入口参数:R30 
;出口参数:无 
;影响资源: 
;***************************************** 
sendbit: 
sbrs R30,0 
rjmp send0 
send1: sbi ddr,bit ;Send a "1" 
ldi R16,0x3A 
rcall delay 
cbi ddr,bit 
ldi R16,0x1C 
rcall delay 
ret 
send0: sbi ddr,bit ;Send a "0" 
ldi R16,0x1C 
rcall delay 
cbi ddr,bit 
ldi R16,0x3A 
rcall delay 
ret 
;***************************************** 
;过程名:sendbyte 
;功能:传出一个字节数据 
;入口参数:R30 
;出口参数:无 
;影响资源:R24 
;***************************************** 
sendbyte: ;测试总线是否忙 
sbis pin,bit 
rjmp sendbyte 
ldi R16,0x76 ;延时 120us 
rcall delay 
sbis pin,bit ;测试 
rjmp sendbyte 

cli ;关中断 

sbi ddr,bit ;总线初始化 
ldi R16,0x58 ;延时 90us 
rcall delay 
cbi ddr,bit 
ldi R16,0x1C ;延时 30us 
rcall delay 

sbi ddr,bit ;Clock 1 
ldi R16,0x3A ;延时 60us 
rcall delay 
cbi ddr,bit 
ldi R16,0x1C ;延时 30us 
rcall delay 

sbi ddr,bit ;Clock 2 
ldi R16,0x1C 
rcall delay ;延时 30us 
cbi ddr,bit 
ldi R16,0x3A ;延时 60us 
rcall delay 

ldi R24,0x08 ;设置计数器 
nextbit: 
rcall sendbit ;输出数据 
ror R30 
dec R24 
brne nextbit 

ldi R16,0xFF ;清中断标志 
out GIFR,R16 
sei ;开中断 

ret 



本文关键字:通信  程序  AVR单片机单片机-工控设备 - AVR单片机

《AVR双CPU通信程序(异步方式)UART》相关文章>>>