|
;---------AVR.mega128版本(晶振为4M)----------
;--------------------------------------------------------------------------------------------------
.include "m128def.inc" ;mega128系统头文件
.def AL =r16 ;通用寄存器
.def AH =r17 ;通用寄存器
.def BL =r18 ;通用寄存器
.def BH =r19 ;通用寄存器
;--------------------------------------------------------------------------------------------------
.CSEG
.org $000 ;ORG汇编器伪指令 设置程序起始位置
rjmp RESET ;单片机复位中断,跳入程序复位入口
.org URXC0addr
rjmp USART_Receive ;通信数据接收服务程序;(INT_ERR)
;--------------------------------------------------------------------------------------------------
;--------主程序--------
;-----循环周期(3ms)----
RESET:
ldi AL,low(RAMEND)
out SPL,AL ;初使化堆栈指针
ldi AL,high(RAMEND)
out SPH,AL ;初使化堆栈指针
ldi AL,0x0f
sts PORTF,AL ;设置MPU的D端口
sts PORTF,AL
sts DDRF,AL
sts DDRF,AL
; wait: rjmp wait
USART_INit:
ldi r17,00
ldi r16,25
out UBRR0L,r17
out UBRR0L,r16 ;设置波特率2400(4MHZ晶振)
ldi AL,0x98 ;接收器与发送器使能
out UCSR0B,AL
ldi r16,0x06
sts UCSR0C,r16 ;设置侦格式:8个数据位,2个停止位
sei
;nop
;nop
;rcall delay
;rcall delay
rcall delay
rcall delay
;-----------------------------------------------------------------------------------------------------
USART_Transmit:
sbis UCSR0A,UDRE0 ;等待发送缓冲器空
rjmp USART_Transmit
ldi AL,0x6b
out UDR0,AL ;将数据放入缓冲器,发送数据
rcall delay
rjmp USART_Transmit
USART_Receive:
push BL
push AL
in r1,SREG
in AL,UDR0
sbic UCSR0A,FE
rjmp RXC_end
cpi AL,0x3f
brne RXC_bit
light:
ldi BL,0x08
sts DDRF,BL ;DDRF是F数据方向寄存器
sts DDRF,BL ;SBR对寄存器指定的位置位
ldi BL,0x07
sts PORTF,BL ;PORTF是F口数据寄存器
sts PORTF,BL
rcall delay
rcall delay
rjmp RXC_end
RXC_bit:
ldi BL,0x08
sts DDRF,BL ;DDRF是F数据方向寄存器
sts DDRF,BL ;SBR对寄存器指定的位置位
ldi BL,0x08
sts PORTF,BL ;PORTF是F口数据寄存器
sts PORTF,BL
rcall delay
rcall delay
; rcall delay
;rcall delay
;rcall delay
;rcall delay
;rcall delay
;rcall delay
;;rcall delay
;rcall delay
wait: rjmp wait
RXC_end:
out SREG,r1
pop AL
pop BL
reti
;-----------------------------------------------------------------------------------------------------
delay:
t1ms:
ldi BH,101 ;延时1ms子程序
push BH
del2: push BH
del3:
dec BH
brne del3
pop BH
dec BH
brne del2
pop BH
ret
;------------------------------------------------------------------------------------
最后就是在开始发送的时候加了两个Delay,就调通了,至于为什么我还不太明白!
谢谢各位朋友的帮助,谢谢你们! |
|