搜索
bottom↓
回复: 5

我的串口程序调通,贴出来大家共同分享!(汇编)

[复制链接]

出0入0汤圆

发表于 2005-8-5 08:48:48 | 显示全部楼层 |阅读模式
;---------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,就调通了,至于为什么我还不太明白!

谢谢各位朋友的帮助,谢谢你们!

出0入0汤圆

发表于 2006-1-2 21:09:54 | 显示全部楼层
谢谢楼主

     我正在为串口的汇编程序郁闷呢

     你这只是发送一个字符

     你写过发送字符串的汇编吗?

     可否告知

出0入0汤圆

发表于 2010-6-19 10:59:22 | 显示全部楼层
MARK

出0入0汤圆

发表于 2010-6-19 21:28:56 | 显示全部楼层
留个名

出0入0汤圆

发表于 2010-6-19 21:54:36 | 显示全部楼层
路过,汇编以前上学时学的,现在用惯了c,反而没心思看了,

出0入0汤圆

发表于 2010-6-20 11:22:08 | 显示全部楼层
mark
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-7 20:14

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表