哪位大哥给个单片机串口程序了(最好是汇编 单片机 汇编程序 串口通信

\u6c42\u95ee\u5355\u7247\u673a\u6c47\u7f16\u4e32\u53e3\u7684\u95ee\u9898

\u4e0b\u9762\u7684CLR ES \u6839\u672c\u6267\u884c\u4e0d\u5230\u561b


CLR ES \u5173\u95ed\u4e32\u53e3\u4e2d\u65ad\uff0c\u6539\u7528\u67e5\u8be2\u65b9\u5f0f\u63a5\u6536\u6216\u53d1\u9001\u6570\u636e\u3002

HERE: AJMP HERE
SINT: MOV P1,R0
JB RI,RECV
JB TI,SEND
AJMP HERE

\u4e2d\u65ad\u91cc\u9762\u76f4\u63a5\u7528\u8fd9\u79cd\u65b9\u5f0f\u76f4\u63a5\u8df3\u5230\u4e3b\u7a0b\u5e8f\uff0c\u6211\u4ee5\u524d\u8fd8\u662f\u771f\u6ca1\u8bd5\u8fc7\uff0c\u4e0d\u8fc7\u4f30\u8ba1\u80fd\u884c\u5427\u3002 \u6211\u4e00\u76f4\u7528RETI \u8fd4\u56de\u5806\u6808\u5730\u5740\u4f4d\u7f6e\u7684\u3002

\u4f46\u4e0b\u9762\u8fd9\u5730\u65b9\u80af\u5b9a\u6709\u9519\u7684\uff0c\u5c31\u662f\u6267\u884cMOV SBUF,A \u540e\u6ca1\u6709\u7b49\u5f85\uff01\uff01
\u6b63\u786e\u7684\u987a\u5e8f\u662f\uff1a CLR TI ;\u6e05\u53d1\u9001\u6807\u8bb0
MOV SBUF,A ;\u53d1\u9001
JNB TI,$ ; \u8fd9\u91cc\u662f\u5982\u679cTI\u6ca1\u6709\u88ab\u7f6e1\u5c31\u7b49\u5f85\uff0c\u56e0\u4e3a\u9001\u6570\u53ef\u80fd\u8fd8\u6ca1\u6709\u5b8c\u6210\u3002\u3002\u5c31\u53bb\u6267\u884c\u522b\u7684\u52a8\u4f5c\uff0c\u53ef\u80fd\u4f1a\u6709\u95ee\u9898\u3002
\u63a5\u6536\u4e5f\u4e00\u6837\u8981\u7b49\u5f85:
MOV A,SBUF
JNB RI,$ ;\u7b49\u5f85\u63a5\u6536\u5b8c\u6210\u6807\u5fd7\u3002

\u53e6\u5916\uff1a
CPL P1.7 \u6709\u95ee\u9898\uff0c\u6211\u731c\u4f60\u662f\u7528P1.7\u6765\u89c2\u5bdf\u63a5\u6536\u6b21\u6570\uff0c
\u4f46\u7531\u4e8eCPL P1.7\u53d6\u53cd\u547d\u4ee4\u662f\u8bfb\u4e00\u4e0bP1.7\u518d\u53d6\u53cd\u8f93\u51fa\u7684\uff0c\u5982\u679c\u4f60\u7684p1.7\u5916\u63a5\u7535\u8def\u4e0d\u79d1\u5b66\uff0c\u4e0d\u5408\u7406\uff0c\u53ef\u80fd\u4f1a\u51fa\u73b0\u4f60\u6bcf\u6b21\u4e0d\u7ba1\u53d11,\u8fd8\u662f\u53d10\uff0cp1.7\u90fd\u662f\u4f4e\u7535\u5e73\uff0c\u6bd4\u5982\u4f60\u5c06p1.7\u76f4\u63a5\u63a5\u5728npn\u4e09\u7ba1\u57fa\u6781\u5c31\u4f1a\u4e00\u76f4\u662f0V\u62160.7V \uff0c P1.7\u7684\u8bfb\u5165\u503c\u4f1a\u603b\u4e3a0\uff0cCPL \u8f93\u51fa\u4f1a\u603b\u662f\u4e3a1
\u4f60\u53ef\u4ee5\u7528\u5185\u90e8\uff08\u975eP\u53e3\u7684\u4f4d\u5730\u5740\u8fc7\u5ea6\u4e00\u4e0b\uff09\uff0c\u6bd4\u5982\uff1a CPL 01H
MOV C\uff0c01H
MOV P1.7\uff0cC
\u4f60\u5148\u8bd5\u9a8c\u5427\u3002\u3002\u3002

楼上那个太纠结了,估计那里找来的 ,改都要改死你,下面这个是接收加上判断数值的片段程序,可以参考然后做适当改正
ORG 0000H
LJMP MAIN
ORG 0030H

MAIN: SETB TR1
MOV TMOD ,#20H
MOV SCON ,#50H
MOV TH1,#0FDH
MOV TL1,#0FDH
LOOP: JNB RI, $
MOV A, SBUF
CJNE A,#10 , LOOP
(然后是接下来的程序)

ps: 我这个是按照晶振设置为11.0592HZ做的,你要按照自己的晶振再计算机定时器的初始值,这个需要注意, 是程序的关键,时序出问题是无法传送指令的, 祝您的问题早日解决~~

给您一个相类似的,程序有注释,您先看看。

; //*****************************************************************
; //* 功能: 双机串口接收程序,主机连续接收R0个数据存放在DPTR开始 *
; //* 的单元中。对接收到的数据进行奇偶校验,若正确则发送00作 *
; //* 应答信号,否则发送ff作应答信号。串口工作在方式3, *
; //* 由定时器1提供波特率。 *
; //*****************************************************************
发送程序代码:
ORG 0000H
SJMP MAIN
ORG 0023H
LJMP COM_INT
MAIN:
MOV SP, #60H
MOV TMOD,#20H
MOV TH1, #0F4H
MOV TL1, #0F4H ;初始值为0XF4 设置波特率为2.4kb/s
MOV PCON,#80H
SETB TR1 ;打开计数器
MOV SCON,#90H ;串口工作在方式3 并且允许接收
MOV DPTR,#DATA_COM ;发送数据的首地址
MOV R0, #00H
SETB EA ;CPU开中断
SETB ES ;允许串口中断
MOV A, R0
MOVC A, @A+DPTR
MOV P1, A
ACALL DELAY
ADD A, #00H
MOV C, P
MOV TB8, C
MOV SBUF,A ;启动串口中断 传数据
SJMP $ ;等待中断
COM_INT:
JB RI, COM_RECEIVE ;看中断是不是由于接收引起的 是则转接收
CLR TI ;否则是发送中断 此时需软件清中断
SJMP COM_END
COM_RECEIVE:
CLR RI
MOV A, SBUF
SUBB A, #01H
JC RIGHT ;应答信息正确 则结束 否则重新发送本次数据
MOV A, R0
MOVC A, @A+DPTR
ADD A, #00H
MOV C, P
MOV TB8, C
MOV SBUF,A ;启动串口中断 重新传本次数据
SJMP COM_END
RIGHT:
INC DPTR
INC R0
MOV A, R0
MOVC A, @A+DPTR
MOV P1, A
ACALL DELAY
ADD A, #00H
MOV C, P
MOV TB8, C
MOV SBUF,A
CJNE R0, #0AH, COM_END
CLR ES
COM_END:
RETI
DELAY:
MOV R2, #100
LOOP:
MOV R3, #100
DJNZ R3, $
DJNZ R2, LOOP
RET
DATA_COM:
DB 0C0H, 0F9H, 0A4H, 0B0H, 099H, 092H, 082H, 0F8H, 080H, 090H
END

接收程序代码:

ORG 0000H
LJMP MAIN
ORG 0023H
LJMP COM_INT
ORG 0100H
MAIN:
MOV SP, #60H
MOV TMOD,#20H
MOV TH1, #0F4H
MOV TL1, #0F4H ;初始值为0XF4 设置波特率为2.4kb/s
MOV PCON,#80H
SETB TR1 ;打开计数器
MOV SCON,#90H ;串口工作在方式3 并且允许接收
MOV R1,#30H ;接收数据的首地址
MOV R0, #00H
SETB EA ;CPU开中断
SETB ES ;允许串口中断
SJMP $
COM_INT:
JB RI, COM_RECEIVE ;看中断是不是由于接收引起的 是则转接收
CLR TI ;否则是发送中断 此时需软件清中断
SJMP COM_END
COM_RECEIVE:
CLR RI
MOV A, SBUF
ADD A, #00H
MOV C, P
JC DATA_JS ;接收到的数据为奇数时转移
ORL C, RB8 ;接收到的数据为偶数 则C应该等于0才正确
JC ERROR ;如果c=1 则说明接收错误
SJMP RIGHT ;否则是正确的
DATA_JS:
ANL C, RB8 ;数据为奇数 C应该等于1才正确
JC RIGHT
ERROR: ;接收到错误数据则发送0ff返回
MOV A, #0FFH
MOV SBUF,A
SJMP COM_END
RIGHT: ;接收正确则存放起来并发送00返回
MOV @R1, A
MOV P1, A
ACALL DELAY
MOV A, #00H
MOV SBUF, A
INC R1
INC R0
CJNE R0, #0AH, COM_END
CLR ES
COM_END:
RETI
DELAY:
MOV R2, #100
LOOP:
MOV R3, #100
DJNZ R3, $
DJNZ R2, LOOP
RET
END

  • 鍝綅楂樻墜甯府蹇欏啓涓崟鐗囨満绋嬪簭,鎬ュ晩!!
    绛旓細鏅曪紒 鎳掗锛佹兂姹傚埆浜哄啓鍑犵櫨瀛楃殑浠g爜锛岃嚜宸卞氨涓嶄細澶氬啓鍑犱釜瀛楋紝鎻忚堪涓涓嬪叿浣撴儏鍐碉紵浣犺捣鐮佸緱鏈変釜鐢佃矾鍥惧惂锛熼毦閬撴兂璁╁埆浜虹‖浠躲佽蒋浠堕兘甯綘鍋氾紵鑷繁鐨勪綔涓氫富瑕佽繕寰楅潬鑷繁瀹屾垚銆傚埆浜哄彧鑳芥槸鎸囩偣鎸囩偣涓嶆槑鐧界殑鍦版柟銆傚暐鍗曠墖鏈锛 鍗曠墖鏈哄垎寰堝缂栫▼鎸囦护闆 鍜岃瑷鐨勶紒 51鍗曠墖鏈猴紵 绾㈤粍缁跨伅鎺ュ摢涓剼锛 闅鹃亾杩樺鎺...
  • avr鍗曠墖鏈涓巔c鐨勯氫俊
    绛旓細鎴戠敤涓汉鐨凙VR鍗曠墖鏈娴嬭瘯杩囩殑锛屾病闂銆備娇鐢ㄧ殑7.3728Mhz鏅舵尟锛屼綘鐨勬槸8M锛屾墍浠BRD鐨勮祴鍊硷紝浣犱釜浜烘敼鏀广傝繕鏈夛紝鐢ㄧ殑鑷埗涓插彛绾夸竴绔槸涓插彛鎺ョ數鑴戯紝鍙︿竴绔槸鎺VR鐨刄SART鐨凾XD,RXD,GND.鎴戜娇鐢涓插彛绋嬪簭sscom32,璋冭瘯鏃剁敱浜庤蒋浠舵湁涓狟UG锛岄渶瑕侀噸澶嶇偣鍑'HEX'鏄剧ず鎵嶈兘鎶婁俊鎭樉绀哄畬鍏ㄣ//USART璋冭瘯 mikegang 10....
  • 鎬!绠鍗曠殑鍗曠墖鏈鎺у埗DS18B20娓╁害璁,proteus浠跨湡涓嶈,鍥惧拰姹囩紪绋嬪簭濡備笅...
    绛旓細缁欎綘涓涓弬鑰绋嬪簭锛岃繕甯︽湁鏃堕挓鑺墖椹卞姩鐨 SCL2 BIT P1.3; //SCL2瀹氫箟涓篜1鍙g殑绗3浣嶈剼锛岃繛鎺DC0831SCL鑴 SDA2 BIT P1.4; //SDA2瀹氫箟涓篜1鍙g殑绗4浣嶈剼锛岃繛鎺DC0831SDA鑴 CS2 BIT P1.6; //CS2瀹氫箟涓篜1鍙g殑绗4浣嶈剼锛岃繛鎺DC0831CS鑴 RST BIT P1.5;// DS1302鐗囬,鍥犺繖涓よ姱鐗...
  • 璇烽珮鎵嬪府蹇欏仛涓涓崟鐗囨満绋嬪簭
    绛旓細define Relay_ON 1 define Relay_OFF 0 sbit Ctr = P2^0;sbit Input = P1^7;void DelayS(long Count){ long m = 0;unsigned char k = 0;for(m=0;m<Count;m++){ DOG = !DOG;for(k=0;k<120;k++);} } void main(void){ Ctr = Relay_OFF;while(1);if(Input ==1) { C...
  • 鐢涓插彛璋冭瘯鍔╂墜v2.2鍙戦,鐢–璇█鎬庝箞缂鍗曠墖鏈涓婄殑鎺ユ敹绋嬪簭
    绛旓細棣栧厛璁剧疆鍗曠墖鏈鐨勪覆鍙d负寮傛閫氫俊鏂瑰紡锛岀劧鍚庡啓涓涓覆鍙涓柇绋嬪簭锛屼腑鏂▼搴忛噷鎶婃帴鏀剁殑鏁版嵁鏀惧湪涓涓暟缁勪腑灏辫銆傝皟璇曞姪鎵嬭缃ソ涓插彛鐨勬尝鐗圭巼锛屽啓濂借鍙戦佺殑鏁版嵁锛岀洿鎺ュ彂閫佸氨OK!
  • 涓嬮潰鏄皬寮熺殑涓涓89C52鍗曠墖鏈閫氳绋嬪簭,鐜板湪8涓伅閮借兘浜,浣嗘槸閮芥槸甯镐寒...
    绛旓細鏄竴鐩撮暱浜紝涓嶅欢鏃3s鍦ㄧ伃鎺夛紝鎴戝彧鐪嬪埌浣绋嬪簭閲岄潰鎵撳紑LED娌℃湁鐪嬪埌鍏抽棴LED鍟婏紝if(dat==0x31){ LED1=0; //鐐逛寒LED锛屾病鏈夌湅鍒伴偅閲屽叧闂晩锛孲BUF=0x61; //缁欎笂浣嶆満鍙戠敓 0x61 while(TI == 0); //绛夊緟鍙戦佸畬鎴 TI = 0;} 鍙互鑰冭檻鍐欎釜寤舵椂3s绋嬪簭锛孡ED = 0锛涚偣浜 Delay3s();寤舵椂...
  • 浣跨敤8051鍗曠墖鏈轰覆鍙杩涜澶氭満閫氫俊銆
    绛旓細鐢涓插彛瀹炵幇锛岀敱浜庡彧鏈変袱涓粠鏈恒傚畬鍏ㄥ彲浠ョ敤绗節浣嶆暟鎹綅鍟婏紝璁╀覆鍙e伐浣滃湪鏂瑰紡3鎴栨柟寮4锛屽湪鎺у埗瀵勫瓨鍣 scon 涓缃ソ绗節浣嶆暟鎹氨琛屼簡 鍐嶇湅鐪8051涓插彛鐨勫伐浣滄柟寮忓惂
  • 鍗曠墖鏈濡備綍鎺ユ敹骞朵娇鐢ㄧ數鑴戝彂閫佹潵鐨勬暟鎹?
    绛旓細濡傛灉鎵鏈夌殑鏁版嵁鍖呮槸瀹氶暱鐨勫彲浠ヤ笉闇瑕佽瀛楁锛夛紝涔嬪悗涓涓嚜宸卞畾涔変负鍛戒护鐨勭被鍨嬶紙濡傦細0x01 琛ㄧず鐢靛姩鏈虹殑杞姩鏂瑰悜锛0x02 浠h〃杞姩鍦堟暟绛夛級锛屼箣鍚庤窡涓婂疄闄呰鍙戦佺粰鍗曞搧鏈虹殑鏁版嵁锛屽姝d紶杩樻槸鍙嶈浆锛岃浆鍔ㄧ殑鍦堟暟鏄灏戠瓑銆傚鏋滀笉鏀惧績浣犲彲浠ュ湪鏈鍚庡姞涓婃暟鎹抚鐨勬牎楠屽拰锛岀敤鏉ヤ繚璇佹暟鎹啀浼犺緭杩囩▼涓病鏈夊嚭閿欍
  • 鍗曠墖鏈轰覆鍙闂
    绛旓細U1锛氳繕娌℃湁鍙戦佹暟鎹憿锛屽氨鍏圱I=1;锛屽垹鎺夎繖琛屻俇2锛氳繕娌℃湁鏀跺埌鏁版嵁鍛紝灏卞厛RI=1;锛屽垹鎺夎繖琛屻俇2锛氫腑鏂柟寮忔帴鏀讹紝搴斿紑涓柇鍝細瑕佹湁锛欼E=0x90锛沀1锛孶2锛歍MOD=0x16锛岄敊璇紝鏀逛负锛歍MOD=0x10 U2锛氫笉瑕佸湪涓柇绋嬪簭涓欢鏃讹紝waiti();鍒犳帀杩欒锛屽彲鏀惧湪涓荤▼搴忎腑锛屾棤闄愬欢鏃剁瓑寰呮帴鏀舵暟鎹 U2锛屾崲鎴8涓...
  • 鍗曠墖鏈虹▼搴闂鍝綅澶у摜甯繖瑙i噴瑙i噴杩欐绋嬪簭
    绛旓細uchar code Pattern_P0[]= { 0xfc,0xf9,0xf3,0xe7,0xcf,0x9f //LED娴佹按鐏暟缁勶紝姣忔鐐逛寒鐩搁偦涓や釜鐏 };uchar code Pattern_P2[]= { 0xf5,0xf6,0xfe,0x54,0x56,0x76,0xd7,0x49,0xa9,0xe4,0xc6 }; //LED鑺辨牱鏄剧ず鏁扮粍 void DelayMS(uint x) //1姣寤舵椂绋嬪簭 { uchar t;...
  • 扩展阅读:51单片机串口通信仿真图 ... 232串口线9针接法图解 ... 烧录时没有检测到串口 ... 51单片机串口发送数据 ... 为什么不建议学单片机 ... 现在什么单片机最好用 ... 单片机太难学了 ... 如何将程序烧录到单片机上 ... 两个单片机串口通信程序 ...

    本站交流只代表网友个人观点,与本站立场无关
    欢迎反馈与建议,请联系电邮
    2024© 车视网