求一个51单片机汇编语言 串口输出一行中文的程序

只要最简单的串口输出就行,多谢!

程序如下,只需要修改MSG中需要发送的中文字符就可以了

ORG 0000H
AJMP MAIN
ORG 0100H
MAIN: MOV SCON,#40H ;设置串行口工作方式1
MOV PCON,#0 ;设置波特率4800
MOV TMOD,#20H ;波特率可根据需要自己修改
MOV TL1,#0FAH
MOV TH1,#0FAH
SETB TR1

MOV DPTR,#MSG ;DPTR指向待输出字符串首地址
NEXT: MOV A,#0
MOVC A,@A+DPTR
CJNE A,'$',NEXT1 ;字符串结尾?
AJMP NEXT2
NEXT1: CLR TI
MOV SBUF,A ;发送
JNB TI,$ ;等待发送完成
INC DPTR ;指向下一字符
AJMP NEXT

NEXT2: SJMP $ ;动态暂停

MSG DB '中华人民共和国' ;定义中文字符串
MSGEND DB '$' ;定义字符串结尾字符,自定义

END
温馨提示:内容为网友见解,仅供参考
第1个回答  2012-05-31
;下载程序以后,联接好串口线
;然后打开串口调试软件,按照您连接的串口,设置好串口特性(注意波特率)
;然后发送数据给下面的机器,并接受下面发送上来的数据!

beep bit p3.7 ;蜂鸣器定义

org 00h
jmp main
org 23h ;串行中断入口地址
jmp com_int ;串行中断服务程序

;*********** 主程序开始 *******************
org 30h
main: mov sp,#30h ;设置堆栈
lcall rest ;初始化
lcall comm ;串口初始化
jmp $ ;原地等待

; ************* 初始化 *********************
rest: mov p0,#00h ;禁止数码管显示
mov p2,#255
clr beep ;禁止蜂鸣器
mov p1,#255 ;禁止LED显示
RET ;返回

; ************** 串口初始化 *****************
;设置串行口工作方式1,定时器1作为波特率发生器
;波特率设置为 2400 ;

comm: mov tmod,#20h ;设置定时器T1工作方式2
mov tl1,#0f4h ;定时器计数初值,波特率 2400
mov th1,#0f4h ;定时器重装值
setb ea ;允许总的中断
setb es ;允许串行中断
mov pcon,#00h ;波特率不倍增
mov scon,#50h ;设置串口工作方式1,REN = 1 允许接收
setb tr1 ;定时器开始工作
ret ;返回
;*************** 串口中断服务程序 ***********
; 如果接收 0FF 表示上位机需要联机信号,单片机发送 0FFH作为
; 应答信号,如果接收到 数字 1~ n,表示相应的功能;
; 这里,如果收到 1 ,则单片机向计算机发送字符 'H';
; 如果收到 2 ,则单片机向计算机发送字符 'e';
; 如果收到其他的数据,则发送 'J';
com_int: clr es ;禁止串行中断
clr ri ;清除接收标志位
mov a,sbuf ;从缓冲区取出数据
mov p1,a
mov dptr,#tab
cjne a,#0ffh,in_1 ;检查数据
mov sbuf,#255 ;收到联机信号,发送联机信号
jnb ti,$ ;等待发送完毕
clr ti ;清除发送标志
setb es ;允许串行中断
reti ;中断返回
in_1: cjne a,#1H, in_2 ;如果收到1
movc a,@a+dptr
mov sbuf,a ;发送 'h'
jnb ti,$ ;等待发送完毕
clr ti ;清除发送中断标志
setb es ;允许串行中断
reti ;中断返回
in_2: cjne a,#2,in_3 ;接收到 2
movc a,@a+dptr
mov sbuf,a ;发送 'e'
jnb ti,$ ;等待发送完毕
clr ti ;清除发送中断
setb es ;允许串行中断
reti ;中断返回
in_3: mov a,#03h
movc a,@a+dptr
mov sbuf,a ;发送 'j'
jnb ti,$ ;等待发送完毕
clr ti ;清除发送中断标志
setb es ;允许串行中断
reti ;返回
tab: db '2','h','e','j'
end
第2个回答  2012-06-02
ff

求一个51单片机汇编语言 串口输出一行中文的程序
SETBTR1 MOVDPTR,#MSG;DPTR指向待输出字符串首地址 NEXT:MOVA,#0 MOVCA,@A+DPTR CJNEA,'$',NEXT1;字符串结尾?AJMPNEXT2 NEXT1:CLRTI MOVSBUF,A;发送 JNBTI,$;等待发送完成 INCDPTR;指向下一字符 AJMPNEXT NEXT2:SJMP$;动态暂停 MSGDB'中华人民共和国';定义中文字符串 MSGENDDB'$';定义...

一个关于51单片机串口数据发送问题(c语言)?
include <reg52.h>#include <intrins.h>#define uchar unsigned char#define uint unsigned intint zhibi_js[40], i0, com_dat;unsigned char a,b,c,flag;uchar Crcl,Crch;const uint code CrcTable[8*32]={0x0000,0x8005,0x800F,0x000A,0x801B,0x001E,0x0014,0x8011,0x8033,0x003...

用汇编语言写一个51单片机adc0809的程序
dis[2]=ad_data[n]\/51; \/\/测得值转换为三位BCD码,最大为5.00V dis[4]=ad_data[n]%51; \/\/ 余数暂存 dis[4]=dis[4]*10; \/\/计算小数第一位 dis[1]=dis[4]\/51; \/\/ dis[4]=dis[4]%51; \/\/ dis[4]=dis[4]*10; \/\/计算小数第二位 dis[0]=dis[4]\/51; \/\/ for(h=0;h<500;h...

51单片机怎么用汇编语言让8个数码管不停的 显示0-9(最好要接74HC595...
要数码管不停显示,只能用动态显示,但是要看是单片机接数码管是哪个端口,还有是直接接在数码管上还是中间有寄存器,不知74HC595是接在哪的

51单片机的串口接收一帧数据有几位?
51单片机的发送和接受,只有10位和11位两种。先说单片机串口的工作方式:单片机串口的工作方式共4种,方式0--方式3.方式0:用移位脉冲。RXD做输入\/输出,TXD进行移位。收发的数据为八位。方式1:传送一帧信息为10位,即1位起始位(0),8位数据位(低位在先)和1位停止位(1)。数据位由TXD发送,由RXD接收方式1:一帧...

51单片机汇编语言编写一个跑马灯的程序,初学者做实验用,具体要求如下...
程序1:ORG 0000H LJMP MAIN ORG 0030H MAIN:MOV SP,#5FH LOOP:MOV A,P2 MOV B,A MOV P0,A MOV P1,#0FFH LOOP1:LCALL DELAY MOV C,P1.7 MOV A,P0 RLC A MOV P0,A MOV A,P1 RLC A MOV P1,A MOV A,P2 CJNE A,B,LOOP SJMP LOOP1 DELAY:MOV R2,#60 DELAY1:MOV R3,#...

求 一个51单片机汇编语言计算阶乘程序
只要结果是十进制的4位数,太小了吧,双字节就能达到65536,这种程序要做就要做到结果是4字节,也就是2的32次方,也就是双字节乘双字节嘛,能难到哪去.给100分我就帮你写一个,说话算数,决不说大话!

单片机 ,一个单片机的程序能改吗.
2.单片机编程,一般都用 汇编 和 C语言 外,还可以用机器语言(这个想是没有人用了).(这点不是太懂,见笑,我一般用C语言,用keil编译调试很方便,程序也易读).3.一般单片机都有相应的程序下载工具,这里所说的工具并不复杂,AT89S51系列用SPI下载,STC单片机都用串口下载.这两者单片机的下载工具都可以自己...

51单片机的 pc值怎么算?
A=( 50h ),SP=( 50h ),(51H)=( 30h ),(52H)=(50h ),PC=( 5030h )pc总是指向下一条指令的首地址的。但是在返回的时候得看堆栈中的数了。上面程序执行完之后:(A)=50H;sp=50H(因为在程序中,sp减了两次,后来又加了两次,在程序最后ret有在返回的时候减了两次...

51单片机应用实例详解图书目录
8.4 单片机与计算机的沟通 8.5 单片机的无线通信 第9章 启发设计的灵感——完整系统实例点拨 9.1 生理参数监护仪 9.2 电子器件测试仪 9.3 电话远程遥控器 9.4 你准备好了吗 参考文献 附录A 51单片机指令集及用法示例 附录B 指令的执行代码表 附录C 中文字型码表 附录D 51单片机USB口下载线 ...

相似回答