谁能帮看下我这个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条回答
ymz000
1楼-- · 2020-02-10 23:34
看看 我做的 RS485的通信程序   使用的是PIC18F85J10 通信没问题
ssr2
2楼-- · 2020-02-11 01:53
问题解决一半了,能发字符串,但是收还是不行,下面是程序,各位大侠帮看下问题在哪???
ssr2
3楼-- · 2020-02-11 05:12
LIST        P=18f248
           INCLUDE     "P18f248.INC"

            org         0x0000                  ;复位矢量
            goto        main                 ;跳转到初始化程序
            org         0x0040                  ;中断矢量

count1      equ      0x72           ;定义一个查表1显示计数器
temp        equ      0x73           ;定义一个临时寄存器
RP0         equ      5h
DATA1       equ      0x74
TEMP        equ      0x75
rc          equ      0x76

loop       movf    count1,0  ;count1作为查表地址偏移量送入W  
           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'i'  
           retlw   a's'  
           retlw   a' '  
           retlw   a'p'  
           retlw   a'i'     
           retlw   a'c'  
           retlw   a'1'  
           retlw   a'8'  
           retlw   a'f'  
           retlw   a'2'  
           retlw   a'4'  
           retlw   a'8'     
           retlw   a'.'  
           retlw   a' '  
           retlw   a' '
           retlw   0
           clrf   count1

read2       movf        rc,0                                  ;字符串"What is your name?"
            addwf       PCL,1
            retlw       a'W'
            retlw       a'h'
            retlw       a'a'
            retlw       a't'
            retlw       a' '
            retlw       a'i'
            retlw       a's'
            retlw       a' '
            retlw       a'y'
            retlw       a'o'
            retlw       a'u'
            retlw       a'r'
            retlw       a' '
            retlw       a'n'
            retlw       a'a'
            retlw       a'm'
            retlw       a'e'
            retlw       a'?'
            retlw       0
            clrf        rc           

GetData    btfss   PIR1,TXIF  ;等待,直到USART空闲  
           goto    GetData
           call    loop       ;查表
           movwf   temp       ;  
           movwf   TXREG      ;查表值送USART  
           incf    count1,1   ;查表计数器加1
           incf    count1,1
           movf    temp,0
           btfss   STATUS,Z   ;检查到读表值为"0"了吗  
           goto    GetData    ;继续发送
           return
           ;goto    $          ;是!结束查表,转到其它处理(这里在此死循环)

fb          movf        RCREG,0
            sublw       0x0d
            btfss       STATUS,Z
            goto        fb
            movf        RCREG,0                 ;重新从USART接收数据到W
            movwf       TXREG                   ;并且转送回去
            movf        rc,0              ;清0读表索引值寄存器
            call        read2             ;调用读表子程序
            incf        rc,1              ;读表索引值递增
            incf        rc,1
            subwf       RCREG,0                 ;输入信息与合法信息比较
            btfsc       STATUS,Z                 ;看是否相符?
            call        loop
            goto        fb
            bsf         PORTB,7
            clrf        rc
            return

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初始化应设为输入)
           bcf         TRISB,7                 
           return

main      
           call init232
m2         call fb
           clrf count1
           clrf rc
           goto m2
           ;bsf  PORTB,7
           end
ssr2
4楼-- · 2020-02-11 06:28
 精彩回答 2  元偷偷看……
jy6715
5楼-- · 2020-02-11 09:36
那要是用C写的话我可以帮助你,我有现成的程序,按你的要求可以帮你改!

一周热门 更多>