性无码一区二区三区在线观看,少妇被爽到高潮在线观看,午夜精品一区二区三区,无码中文字幕人妻在线一区二区三区,无码精品国产一区二区三区免费

  • 回復(fù)
  • 收藏
  • 點(diǎn)贊
  • 分享
  • 發(fā)新帖

PIC16F73串口通信的問題

16F73內(nèi)置有USART功能,我用PIC做一個(gè)發(fā)送測(cè)試測(cè)程序,從PIC上面發(fā)送一個(gè)字節(jié)的字符到PC,PC方使用串口調(diào)試助手看結(jié)果,但是沒有加入任何循環(huán)的語句,PC放會(huì)不停的收到PIC發(fā)送過來的數(shù)據(jù),我實(shí)在想不出是什么問題,我把程序貼出來,請(qǐng)大家?guī)臀铱纯?
led變量是用來跟蹤程序執(zhí)行的流程,結(jié)果目標(biāo)板上的LED不停的閃爍,表示程序在不停的重復(fù)執(zhí)行
watch窗口里看到TXREG寄存器里的數(shù)據(jù)一直沒有沒清空,不知道為什么,按理把數(shù)據(jù)丟進(jìn)TXREG后,發(fā)送就會(huì)開始,發(fā)送結(jié)束后TEREG就會(huì)被清空
;
;TARANS.ASM
;baud rate:9600
;
list            p=16F73
#include        

trans_c        equ        0x20
led            equ        0x21
            org        0x00
            nop
            goto    initial

initial:

;set baud rate

            banksel    SPBRG
            movlw    .129            ;baud rate=9600
            movwf    SPBRG

;TX init

            bcf        TXSTA,SYNC
            bsf        TXSTA,BRGH
            banksel    TXSTA
            bsf        TXSTA,TXEN

;RC init

            banksel    RCSTA
            bsf        RCSTA,SPEN

trans:

            incf    led
            movf    led,w
            banksel    PORTB
            clrf    PORTB
            movwf    PORTB
            banksel    TRISB
            clrf    TRISB
            banksel    TXREG
            movlw    0x54
            movwf    TXREG
            end
全部回復(fù)(8)
正序查看
倒序查看
whatcall
LV.5
2
2007-10-26 19:03
程序缺少主循環(huán),單片機(jī)會(huì)不停跑飛并復(fù)位.你看到的現(xiàn)象是合理的.
0
回復(fù)
flashhun
LV.2
3
2007-10-29 12:27
@whatcall
程序缺少主循環(huán),單片機(jī)會(huì)不停跑飛并復(fù)位.你看到的現(xiàn)象是合理的.
主循環(huán)就是trans,僅僅為了測(cè)試,并沒有寫循環(huán),就是想讓程序發(fā)送一個(gè)字節(jié)就中止,為什么這樣會(huì)不停的跑飛和復(fù)位呢
0
回復(fù)
xing1234
LV.6
4
2007-10-29 15:35
@flashhun
主循環(huán)就是trans,僅僅為了測(cè)試,并沒有寫循環(huán),就是想讓程序發(fā)送一個(gè)字節(jié)就中止,為什么這樣會(huì)不停的跑飛和復(fù)位呢
我有點(diǎn)菜,程序看起來有些讓人頭暈.
0
回復(fù)
whatcall
LV.5
5
2007-10-29 18:59
@flashhun
主循環(huán)就是trans,僅僅為了測(cè)試,并沒有寫循環(huán),就是想讓程序發(fā)送一個(gè)字節(jié)就中止,為什么這樣會(huì)不停的跑飛和復(fù)位呢
"就是想讓程序發(fā)送一個(gè)字節(jié)就中止",應(yīng)該在end前加上
stop:
  goto stop
來停在這里,否則單片機(jī)運(yùn)行起來PC指針不停累加直到溢出從0000復(fù)位啟動(dòng).
0
回復(fù)
flashhun
LV.2
6
2007-10-30 10:08
@whatcall
"就是想讓程序發(fā)送一個(gè)字節(jié)就中止",應(yīng)該在end前加上stop:  gotostop來停在這里,否則單片機(jī)運(yùn)行起來PC指針不停累加直到溢出從0000復(fù)位啟動(dòng).
你的意思是必須讓PC指針在指定的范圍內(nèi)活動(dòng)是吧,這樣來,上面的是測(cè)試的程序當(dāng)然就沒有問題了,但是,我之前的程序是使用函數(shù)調(diào)用的方式發(fā)送單個(gè)字節(jié),給定一個(gè)循環(huán)的次數(shù),是有主循環(huán)的,循環(huán)結(jié)束后讓程序停下來,但是PC方仍然是不停的收到數(shù)據(jù),跟蹤發(fā)現(xiàn)TRMT位始終不為1,這個(gè)才是我串口通信的主要問題,程序代碼如下:
;
;TARANS.ASM
;baud rate:9600
;
list p=16F73
#include

trans_c equ 0x20
led equ 0x21
org 0x00
nop
goto initial

initial:

;set baud rate

banksel SPBRG
movlw .129 ;baud rate=9600
movwf SPBRG

;TX init

bcf TXSTA,SYNC
bsf TXSTA,BRGH
banksel TXSTA
bsf TXSTA,TXEN

;RC init

banksel RCSTA
bsf RCSTA,SPEN


trans:

banksel trans_c
decfsz trans_c,f
call send1
goto trans
stop:
goto stop


send1:

banksel TXSTA
btfss TXSTA,TRMT
goto send1
banksel TXREG
movlw 0x54
movwf TXREG
return
end
0
回復(fù)
anycrying
LV.5
7
2007-10-30 18:01
@flashhun
你的意思是必須讓PC指針在指定的范圍內(nèi)活動(dòng)是吧,這樣來,上面的是測(cè)試的程序當(dāng)然就沒有問題了,但是,我之前的程序是使用函數(shù)調(diào)用的方式發(fā)送單個(gè)字節(jié),給定一個(gè)循環(huán)的次數(shù),是有主循環(huán)的,循環(huán)結(jié)束后讓程序停下來,但是PC方仍然是不停的收到數(shù)據(jù),跟蹤發(fā)現(xiàn)TRMT位始終不為1,這個(gè)才是我串口通信的主要問題,程序代碼如下:;;TARANS.ASM;baudrate:9600;listp=16F73#includetrans_cequ0x20ledequ0x21org0x00nopgotoinitialinitial:;setbaudratebankselSPBRGmovlw.129;baudrate=9600movwfSPBRG;TXinitbcfTXSTA,SYNCbsfTXSTA,BRGHbankselTXSTAbsfTXSTA,TXEN;RCinitbankselRCSTAbsfRCSTA,SPENtrans:bankseltrans_cdecfsztrans_c,fcallsend1gototransstop:gotostopsend1:bankselTXSTAbtfssTXSTA,TRMTgotosend1bankselTXREGmovlw0x54movwfTXREGreturnend
你那個(gè):goto trans....,進(jìn)不了后面的stop.
0
回復(fù)
whatcall
LV.5
8
2007-10-30 21:47
@flashhun
你的意思是必須讓PC指針在指定的范圍內(nèi)活動(dòng)是吧,這樣來,上面的是測(cè)試的程序當(dāng)然就沒有問題了,但是,我之前的程序是使用函數(shù)調(diào)用的方式發(fā)送單個(gè)字節(jié),給定一個(gè)循環(huán)的次數(shù),是有主循環(huán)的,循環(huán)結(jié)束后讓程序停下來,但是PC方仍然是不停的收到數(shù)據(jù),跟蹤發(fā)現(xiàn)TRMT位始終不為1,這個(gè)才是我串口通信的主要問題,程序代碼如下:;;TARANS.ASM;baudrate:9600;listp=16F73#includetrans_cequ0x20ledequ0x21org0x00nopgotoinitialinitial:;setbaudratebankselSPBRGmovlw.129;baudrate=9600movwfSPBRG;TXinitbcfTXSTA,SYNCbsfTXSTA,BRGHbankselTXSTAbsfTXSTA,TXEN;RCinitbankselRCSTAbsfRCSTA,SPENtrans:bankseltrans_cdecfsztrans_c,fcallsend1gototransstop:gotostopsend1:bankselTXSTAbtfssTXSTA,TRMTgotosend1bankselTXREGmovlw0x54movwfTXREGreturnend
看看anycrying的回復(fù)吧,似乎朋友對(duì)于匯編程序的結(jié)構(gòu)認(rèn)識(shí)還是剛?cè)腴T的階段,多看一些書吧,打好基礎(chǔ).
0
回復(fù)
flashhun
LV.2
9
2007-10-31 09:16
@anycrying
你那個(gè):gototrans....,進(jìn)不了后面的stop.
多謝指正,的確是我寫錯(cuò)了,我把他改過來就好了,這個(gè)問題的確是我對(duì)匯編的程序結(jié)構(gòu)不清楚,我不知道原來自己需要控制PC指針的活動(dòng)范圍.多謝兩位,還有就是用MPLAB的sim似乎跟蹤下來的并非實(shí)際程序運(yùn)行的流程,不知道這個(gè)debug是怎么用的
0
回復(fù)
發(fā)