每次spi发送完一字节,都要产生一个中断,以使程序跳转到spi的中断程序。由于spi主从机的移位寄存器可以看成是一个分布式的16 位循环移位寄存器,而且在当数据从主机移向从机的同时,数据也从从机移向主机,故在中断程序中,应首先判断spdr中的数据是否是需要接收的数据(相关值),然后判断spi缓冲区中的数据(相关码)是否发完,如没有,则继续发送,直到发完为止。具体程序如下:
spi_int:push xl ;保存寄存器的值
push xh
in xl,sreg
push xl
lds xl, rcormark ;判断是否为有效数据,“0”为有效
brne spi_2 不等于0,跳
in xl, spdr
sts incorbuf, xl ;将相关值存入incorbuf
spi_2: lds xl, spififoo ;比较缓冲区的输入,输出指针
lds sprx, spififoi
cp xl. sprx ;
breq spiend ;相等,则数据发完,跳
ldi xh,$9 ;不等,则取下一个字节送入spdr
ld sprx, x+
out spdr, sprx
cpi xl, $0e0 ;调整spififoo指针
brlo spi_0 ;未超过缓冲区范围,跳
ldi xl, $0c2 ;超过,将缓冲区开始地
址给spififoo
spi_0: sts spififoo,xl;
spiend:pop xl
out sreg,xl
pop xh
pop xl
reti
5 结束语
本设计方案已通过软硬件调试,结果表明:at-mega103 单片机 较89c5x系列单片机在资源和功能上都有很大的提高,不但控制更加简单、灵活,而且能够节省不少外围电路,因此具有成本和体积上的优势,可完全满足跳频信号处理模块的功能要求。
本文关键字:单片机 AVR单片机,单片机-工控设备 - AVR单片机
上一篇:AVR精确定时的编程实验