久久久国产精品视频袁燕,99re久久精品国产,亚洲欧美日韩国产综合v,天天躁夜夜躁狠狠久久,激情五月婷婷激情五月婷婷

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

51單片機通信問題

51單片機通信問題
請各位前輩大俠高手幫忙解有關(guān)問題 感激不盡 !
本人是單片機初學者 本來想做多機通信的 但實驗多次失敗 后來把通信程序簡化 就是直接一對一把資料傳送 但還是不成功.
以下是所寫的程序 發(fā)送用STC12C6508AD單片機 接收用STC11F32XE 這兩單片機都是8051兼容的 晶振是用11.0592MHZ的.
兩邊都有用到232 IC RXD TXD 有交叉連接, 先進入接收資料的子程序 再到發(fā)送資料的子程序 用串口工作方式3
RXD---TXD
TXD---RXD


;發(fā)送資料的子程序 STC12C6508AD 兼容51單片機 :

SLV: MOV TMOD,#20H ;TIMER 1 MODE2 8 BIT AUTO LOAD
MOV TL1,#0FDH ;9600
MOV TH1,#0FDH
SETB TR1 ;START TIMER 1
MOV SCON,#0C0H ;1100 0000B MODE 3, REN=0

;send data  -------------------------------------------------
CLR TB8
MOV R0,#030H ;33 32 31 30H
MOV R7,#04D
MASLOOP: MOV A,@R0
MOV SBUF,A
MASWA: JBC TI,MASCOM
SJMP MASWA
MASCOM: INC R0
DJNZ R7,MASLOOP
RET
____________________________________________________________________








;接收資料的子程序 STC11F32XE 兼容51單片機 :

MAS: MOV TMOD,#20H ;TIMER 1 MODE2 8 bit auto load
MOV TL1,#0FDH ;9600
MOV TH1,#0FDH
SETB TR1 ;START TIMER 1
MASCON: MOV SCON,#0D0H ;1101 0000B MODE 3, REN=1


;RECEIVE --------------------------------
RDATA:
MOV R0,030H ;RECEIVE DATA STORE TO 33 32 31 30H
MOV R7,04D
CLR SM2
SLVSR3: JBC RI,SLVSR4 ;IF RI SET JMP TO SLVSR4
SJMP SLVSR3
SLVSR4:
SLVRIG: MOV A,SBUF
MOV @R0,A
INC R0
DJNZ R7,SLVSR3
RET
全部回復(5)
正序查看
倒序查看
ppeter
LV.2
2
2009-10-16 17:28
問題找到,接收資料的子程序 忘了加上“ # ” 謝謝!


MOV R0,#030H ;33 32 31 30H
MOV R7,#04D
0
回復
ppeter
LV.2
3
2009-10-19 10:58
@ppeter
問題找到,接收資料的子程序忘了加上“#”謝謝!MOVR0,#030H;33323130HMOVR7,#04D
STC12C5410AD 和 STC11F32AD 是8051的兼容單片機 我再做了查詢方式和中斷方式的實驗 發(fā)現(xiàn)很奇怪的現(xiàn)象 STC11F32AD在中斷方式時是正確的其他都不行 到底是怎么回事?以下是查詢方式和中斷方式的程序 請大家?guī)蛶兔?非常感謝!

STC12C5410AD:
98 80 98 80 9E 80 80 80 86 80 F8 80 FE 80 E0 80 E6 80 18 00 1E 00

STC11F32AD:
0A 0B 0A 0B 08 09 0E 0F 0C 0D 02 03

   JMP MAIN
   ORG 30H
MAIN:
   MOV SP,#070H
MOV   SCON,#050H ;控制狀態(tài)字  
     MOV TMOD,#020H ;T1作波特率發(fā)生器
MOV   TH1,#0FDH       ;選定波特率 9600
MOV   TL1,#0FDH
SETB   TR1
SETB   EA   ;開串行口中斷
SETB   ES
CLR TI
;1. 查詢方式:
MOV R0,#00
TRAM: MOV A,R0    ;取數(shù)據(jù)
XRL A,#10D
JZ ENDD
   MOV SBUF,A   ;發(fā)送一個字符
WAIT: JBC TI,NEXT ;等待發(fā)送結(jié)束
SJMP WAIT
NEXT: INC R0    ;準備下一次發(fā)送
SJMP TRAM
ENDD: NOP
NOP
SJMP ENDD
END
----------------------------------------------------------

STC12C5410AD:
00 06 00 18 00 1E 00 60 00 66 00 78 00 7E 00 80 80 86 80 98 80

STC11F32AD:
00 01 02 03 04 05 06 07 08 09 0A     ( 這個是正確的 )

JMP MAIN
ORG 0023H ;串行口中斷入口
AJMP   SINT
   ORG 30H
MAIN:
   MOV SP,#070H
MOV   SCON,#050H ;控制狀態(tài)字
     MOV TMOD,#020H ;T1作波特率發(fā)生器
MOV   TH1,#0FDH       ;選定波特率 9600
MOV   TL1,#0FDH
SETB   TR1
SETB   EA   ;開串行口中斷
SETB   ES
CLR TI
;2.中斷方式:

TRAM: MOV R0,#00
MOV A,R0     ;取數(shù)據(jù)
MOV SBUF,A   ;發(fā)送第一個字符
H:
SJMP H      ;其它工作
SINT: CLR     TI         ;中斷服務(wù)程序
XRL A,#10D
JZ HH
INC R0
MOV A,R0     ;取數(shù)據(jù)
MOV SBUF,A   ;發(fā)送下一個字符
HH:
RETI
END


0
回復
ppeter
LV.2
4
2009-10-19 16:20
@ppeter
STC12C5410AD和STC11F32AD是8051的兼容單片機我再做了查詢方式和中斷方式的實驗發(fā)現(xiàn)很奇怪的現(xiàn)象STC11F32AD在中斷方式時是正確的其他都不行到底是怎么回事?以下是查詢方式和中斷方式的程序請大家?guī)蛶兔Ψ浅8兄x!STC12C5410AD:988098809E8080808680F880FE80E080E68018001E00STC11F32AD:0A0B0A0B08090E0F0C0D0203  JMPMAIN  ORG30HMAIN:  MOVSP,#070HMOV  SCON,#050H;控制狀態(tài)字      MOVTMOD,#020H;T1作波特率發(fā)生器MOV  TH1,#0FDH      ;選定波特率9600MOV  TL1,#0FDHSETB  TR1SETB  EA  ;開串行口中斷SETB  ESCLRTI;1.查詢方式:MOVR0,#00TRAM:MOVA,R0  ;取數(shù)據(jù)XRLA,#10DJZENDD  MOVSBUF,A  ;發(fā)送一個字符WAIT:JBCTI,NEXT;等待發(fā)送結(jié)束SJMPWAITNEXT:INCR0  ;準備下一次發(fā)送SJMPTRAMENDD:NOPNOPSJMPENDDEND----------------------------------------------------------STC12C5410AD:00060018001E006000660078007E00808086809880STC11F32AD:000102030405060708090A    (這個是正確的)JMPMAINORG0023H;串行口中斷入口AJMP  SINT  ORG30HMAIN:  MOVSP,#070HMOV  SCON,#050H;控制狀態(tài)字    MOVTMOD,#020H;T1作波特率發(fā)生器MOV  TH1,#0FDH      ;選定波特率9600MOV  TL1,#0FDHSETB  TR1SETB  EA  ;開串行口中斷SETB  ESCLRTI;2.中斷方式:TRAM:MOVR0,#00MOVA,R0    ;取數(shù)據(jù)MOVSBUF,A  ;發(fā)送第一個字符H:SJMPH    ;其它工作SINT:CLR    TI        ;中斷服務(wù)程序XRLA,#10DJZHHINCR0MOVA,R0    ;取數(shù)據(jù)MOVSBUF,A  ;發(fā)送下一個字符HH:RETIEND
問題已解決 是晶振用錯頻率了
0
回復
ppeter
LV.2
5
2009-10-19 16:40
@ppeter
STC12C5410AD和STC11F32AD是8051的兼容單片機我再做了查詢方式和中斷方式的實驗發(fā)現(xiàn)很奇怪的現(xiàn)象STC11F32AD在中斷方式時是正確的其他都不行到底是怎么回事?以下是查詢方式和中斷方式的程序請大家?guī)蛶兔Ψ浅8兄x!STC12C5410AD:988098809E8080808680F880FE80E080E68018001E00STC11F32AD:0A0B0A0B08090E0F0C0D0203  JMPMAIN  ORG30HMAIN:  MOVSP,#070HMOV  SCON,#050H;控制狀態(tài)字      MOVTMOD,#020H;T1作波特率發(fā)生器MOV  TH1,#0FDH      ;選定波特率9600MOV  TL1,#0FDHSETB  TR1SETB  EA  ;開串行口中斷SETB  ESCLRTI;1.查詢方式:MOVR0,#00TRAM:MOVA,R0  ;取數(shù)據(jù)XRLA,#10DJZENDD  MOVSBUF,A  ;發(fā)送一個字符WAIT:JBCTI,NEXT;等待發(fā)送結(jié)束SJMPWAITNEXT:INCR0  ;準備下一次發(fā)送SJMPTRAMENDD:NOPNOPSJMPENDDEND----------------------------------------------------------STC12C5410AD:00060018001E006000660078007E00808086809880STC11F32AD:000102030405060708090A    (這個是正確的)JMPMAINORG0023H;串行口中斷入口AJMP  SINT  ORG30HMAIN:  MOVSP,#070HMOV  SCON,#050H;控制狀態(tài)字    MOVTMOD,#020H;T1作波特率發(fā)生器MOV  TH1,#0FDH      ;選定波特率9600MOV  TL1,#0FDHSETB  TR1SETB  EA  ;開串行口中斷SETB  ESCLRTI;2.中斷方式:TRAM:MOVR0,#00MOVA,R0    ;取數(shù)據(jù)MOVSBUF,A  ;發(fā)送第一個字符H:SJMPH    ;其它工作SINT:CLR    TI        ;中斷服務(wù)程序XRLA,#10DJZHHINCR0MOVA,R0    ;取數(shù)據(jù)MOVSBUF,A  ;發(fā)送下一個字符HH:RETIEND
問題已解決 是晶振用錯頻率了
0
回復
ksjun
LV.3
6
2009-10-27 21:02
@ppeter
問題已解決是晶振用錯頻率了
只要多運行幾次試試,問題總能找的出來的~~
1
回復
發(fā)