谁能帮看下我这个RS232收发字符串的程序问题在哪??

2020-02-09 11:24发布

我把下面的程序放在主程序里怎么没反映呢,串口精灵没有输出字符啊!!!!
我用PIC18F248

loop       movf count1,0 ;count1作为查表地址偏移量送入W
           read1 ;字符串"my name"
           addwf PCL,1 ;地址偏移量加当前PC值
           retlw a' ' ;换行控制符号,即0DH=<CR>
           retlw a' ' ;回车控制符号,即0AH=<LF>
           retlw a'M' ;送回到微机超级终端的字符串
           retlw a'y'
           retlw a' '
           retlw a'n'
           retlw a'a'
           retlw a'm'
           retlw a'e'   
           retlw a' '
           retlw a' ' ;
           retlw 0
           movwf temp ;
GetData    btfss PIR1,TXIF ;等待,直到USART空闲
           goto GetData
           movwf TXREG ;查表值送USART
           incf count1,1 ;查表计数器加1
           movf temp,W ;检查到读表值为"0"了吗
           btfss STATUS,Z ;是!跳一步,结束查表
           goto loop ;否!应该返回继续查表
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
17条回答
ssr2
1楼-- · 2020-02-09 13:50
 精彩回答 2  元偷偷看……
youmcu
2楼-- · 2020-02-09 18:28
retlw 是带参数返回指令,你这里loop只能call,不可用goto
  movwf TXREG ;查表值送USART -- 这句应放在call  loop  之后

串口初始化: 之前要将RX引脚设为输入
;******************************************************************
;                init232 - 初始化串行口(init serial port)
;******************************************************************
init232                clrf                STATUS
                bsf                STATUS,RP0                ; BANK1
                movlw                b'00100100'
                movwf                TXSTA                        ; 选择异步高速 传输8位数据方式 发送允许
                movlw                .25
                movwf                SPBRG                        ; 将传输的波特率设为约9600bps(4M)

                clrf                STATUS                        ; BANK0

                movlw                b'10010000'                ; 选择异步高速 传输8位数据方式 接收允许
                movwf                RCSTA                        ; 自动将RC6、RC7配置为串口工作方式(TRISC,7初始化应设为输入)

                return

;******************************************************************
ssr2
3楼-- · 2020-02-09 20:45
还是不行啊!!!我的串口都设置对了呀!!能直接给段收发字符串的程序吗????????万谢!!!!!!!!!!!
youmcu
4楼-- · 2020-02-10 01:22
哎!错误在上面已跟你说了,可以在MPLAB SIM里仿真一下啊!    能直接给段收发字符串的程序吗?(人家给的不如自已解决了印象深刻哦)
帮你改下吧 -- :::  从GetData 处运行哎
loop       movf    count1,0  ;count1作为查表地址偏移量送入W
        ;  read1             ;字符串"my name" ?????
           addwf   PCL,1     ;地址偏移量加当前PC值
           retlw   a' '     ;换行控制符号,即0DH=<CR>
           retlw   a' '     ;回车控制符号,即0AH=<LF>
           retlw   a'M'      ;送回到微机超级终端的字符串
           retlw   a'y'
           retlw   a' '
           retlw   a'n'
           retlw   a'a'
           retlw   a'm'
           retlw   a'e'   
           retlw   a' '
           retlw   a' '
           retlw   0

GetData    btfss   PIR1,TXIF  ;等待,直到USART空闲
           goto    GetData
           call    loop       ;查表
           movwf   temp       ;
           movwf   TXREG      ;查表值送USART
           incf    count1,1   ;查表计数器加1
           movf    temp,W
           btfss   STATUS,Z   ;检查到读表值为"0"了吗
           goto    GetData    ;继续发送
           goto    $          ;是!结束查表,转到其它处理(这里在此死循环)
ssr2
5楼-- · 2020-02-10 04:19
大侠,试了您改的程序,怎么只能执行一次呢,应该是反复发送呀??而且每个字符为什么发的是双字符呢?下面是我实际写进PIC的程序
ssr2
6楼-- · 2020-02-10 09:49
 精彩回答 2  元偷偷看……

一周热门 更多>