单片机与PC通信串口收发不一致的问题

用的PIC16F877A

现在在调试串口,用的李学海那本书上的串口调试程序

为什么遇到发送和接收不一致的情况?

就是我发1,用串口调试助手接收到的是9>

发其他数据有的是正确的,但是都带>号。

这是什么原因呢

大家帮帮我,谢谢了。

程序应该没有问题,我从书上直接抄的

VAL_US EQU .249
VAL_MS EQU .200
;-------------
STATUS EQU 3H
Z EQU 2H
INTCON EQU 0BH
PORTC EQU 07H
TRISC EQU 87H
PORTD EQU 08H
TRISD EQU 88H
RP0 EQU 5H
PIR1 EQU 0CH
PIE1 EQU 8CH
RCSTA EQU 18H
TXSTA EQU 98H
SPBRG EQU 99H
RCREG EQU 1AH
TXREG EQU 19H
GIE EQU 7
PEIE EQU 6
RCIF EQU 5
RCIE EQU 5

COUNT EQU 0X70
COUNT_MS EQU 0X71

ORG 0X0000
GOTO STARTUP
ORG 0X0004

BTFSS PIR1,RCIF
GOTO ERR_EXIT
MOVF RCREG,0
MOVWF TXREG

ERR_EXIT RETFIE

STARTUP BSF STATUS,RP0
CLRF TRISD
BSF TRISC,6
BSF TRISC,7
MOVLW .12
MOVWF SPBRG
MOVLW B'00100100'
MOVWF TXSTA
BSF PIE1,RCIE
BCF STATUS,RP0
MOVLW B'10010000'
MOVWF RCSTA
BSF INTCON,GIE
BSF INTCON,PEIE

MAIN CLRWDT
CALL DELAY_MS
CALL DELAY_MS
GOTO MAIN

DELAY_MS:
MOVLW VAL_MS
MOVWF COUNT_MS
LOOP_MS CALL DELAY_US
DECFSZ COUNT_MS,F
GOTO LOOP_MS
RETURN

DELAY_US: NOP
MOVLW VAL_US
MOVWF COUNT
LOOP_US NOP
DECFSZ COUNT,F
GOTO LOOP_US
RETURN

END
我在串口调试助手中设置的是16进制发和16进制显示。程序的功能也是收到什么就返回什么啊。而且,不是每个数据都不正常,大概有一半的数据可以正常接收。
我又改了下程序,让串口只要有中断就向上位机发送固定值,但是仍然不能成功,发送回的数据是不固定的随机数。
请大家看看是什么问题。谢谢。

第1个回答  2008-06-27
有可能是字符显示的问题。字符显示时用的是ascII码。例如受到的数据是 0x39,正好对应ascII码表的 “9”字符,所以就显示“9”。
第2个回答  2008-06-27
原因很多,比如波特率,电路板干扰,电源电压等都有可能影响。
相似回答