共2条
1/1 1 跳转至页
MSP430 MSP430程序转换问题
问
各位高手,本人正在毕业设计,急需将一些8051的程序转换成MSP430的程序形式,本人实在没这能耐,只有求助各位高人了,拉兄弟一把吧!!!8051程序如下:
SUB1: JB BUSY,SUB1 ;确信模块空闲(BUSY=0)
MOV P1,A ;向总线送数
NOP ;等待数据总线稳定
SETB REQ ;置模块REQ端为高电平(REQ=1),向模块发请求命令
HE3: JNB BUSY,HE3 ;等待模块响应(BUSY =1)
CLR REQ ;撤消REQ请求信号,数据输入结束
RET ;返回
2) 写模块子程序(单线延时方式)
---该程序仅使用REQ一条控制线方式对模块进行写操作。在MPU 的 I/O口短缺的情况下非常适用。
SUB2: MOV P1,A ;向总线送数
NOP ;等待数据总线稳定
SETB REQ ;置模块REQ端为高电平(REQ=1),向模块发请求命令
LCALL DALEY1 ;调延时子程序DALEY1等待模块响应 *1
CLR REQ ;撤消REQ请求信号,数据输入结束
LCALL DALEY2 ;调延时子程序DALEY2等待模块内部处理完成 *2
RET ;返回
注:*1、延时时间参照表—4中的Tb及Trt
*2、延时时间参照表—4中的Ts1及Ts2
3) 以下程序坐标值为OCMJ4X8B模块坐标
3.1写汉字程序
---该程序显示一个汉字“啊”(区位码为1001H )
MOV A,#0F0H ;选显示汉字命令字
ACALL SUB1 ;调用写子程序
MOV A,#02H ;O2H,XX,16*16点阵为单位的屏幕坐标
ACALL SUB1 ;调用写子程序
MOV A,#00H ;00H,YY,16*16点阵为单位的屏幕坐标
ACALL SUB1 ;调用写子程序
MOV A,#10H ;10H,QQ,GB2312汉字区位码高位
ACALL SUB1 ;调用写子程序
MOV A,#01H ;01H,WW,GB2312汉字区位码低位
ACALL SUB1 ;调用写子程序
3.2写8*16 ASCII码程序
---该程序显示一个8*16 ASCⅡ码 “A” :
MOV A,#0F9H ;选显示8*16 ASCII字符命令字
ACALL SUB1 ;调用写子程序
MOV A,#04H ;04H,XX,8*8点阵为单位的屏幕坐标值X
ACALL SUB1
MOV A,#00H ;00H,YY,1*1点阵为单位的屏幕坐标值Y
ACALL SUB1
MOV A,#41H ;AS,ASCII字符代码“A”
ACALL SUB1
注:X坐标(本例中的 #04H)与ASCⅡ码中规定的相同,Y坐标(本例中的 #00H)以点阵单元为单位。
3.3写8*8 ASCII码程序
---该程序显示一个8*8 ASCⅡ码 “A” :
MOV A,#0F1H ;选显示8*8 ASCII字符命令字
ACALL SUB1 ;调用写子程序
MOV A,#04H ;04H,XX,8*8点阵为单位的屏幕坐标值X
ACALL SUB1
MOV A,#00H ;00H,YY,1*1点阵为单位的屏幕坐标值Y
ACALL SUB1
MOV A,#41H ;AS,ASCII字符代码“A”
ACALL SUB1
3.4绘图一点(1*1点阵)程序
MOV A,#0F2H ;选显示位点阵命令字
ACALL SUB1 ;调用写子程序
MOV A,#20H ;20H,XX,以1*1点阵为单位的屏幕坐标值X
ACALL SUB1
MOV A,#00H ;00H,YY,以1*1点阵为单位的屏幕坐标值Y
ACALL SUB1
3.5绘图一横线(1*8点阵)程序
MOV A,#0F3H ;选显示字节点阵命令字
ACALL SUB1 ;调用写子程序
MOV A,#04H ;04H,XX,以1*8点阵为单位的屏幕坐标值X
ACALL SUB1
MOV A,#00H ;00H,YY,以1*1点阵为单位的屏幕坐标值Y
ACALL SUB1
MOV A,#0FH ;OFH,为输入字节数据,1为黑点,0为白点
ACALL SUB1
3.6清屏程序
MOV A,#0F4H ;选清屏指令命令字
ACALL SUB1 ;调用写子程序
4) 初始化程序
ORG 000H ;程序首址
LJMP 100H ;跳过中断区
ORG 100H
MOV SP,#60H ;设堆栈
CLR REQ ;REQ=0
SETB BUSY ;BUSY=1
5) 汉字内码转换成区位码程序
---该程序将外部数据(如上位机)中的汉字内码转换成区位码以便模块直接显示。
R5--存放机内码高位;R6--存放机内码低位
SUB7: PUSH A ;把机内码高位放到A累加器
CLR C ;
MOV A,R5 ;
SUBB A,#0A0H ;机内码减A0H为国标区码
MOV R5,A ;把转换好的区码放回R5
CLR C
MOV A,R6 ;把机内码低位放到A累加器
SUBB A,#0A0H ;机内码减A0H为国标位码
MOV R6,A ;把转换好的位码放回R6
POP A
RET 答 1: 把你的程序转化成430的程序难度不大,只是你的是汇编程序,还是先把你的程序转化为C程序吧 答 2: 呵呵你是真高人 汇编那么好 嘿嘿 答 3: 什么东西
汇编太麻烦 了 答 4: 51---------------------------------430
MOV DST,SRC--------MOV SRC,DST ;+“.B ”字节,+“.W”字
SETB REQ---------------BIS.B #001H,&P1OUT ;将P1端口的“0”位置1,清零用BIC
430的IO口为8位,双向、位独立控制。P1OUT是P1口的位输出寄存器,相应的还有位输入寄存器P1IN。为了选择端口位的输入输出方式,要设置位方向寄存器P1DIR。P1DIR的相应位为“1”,则该位为输出,否则为输入。如:MOV.B #072H,&P1DIR
JNB BUSY,HE3------JZ HE3 ;状态寄存器“Z”位为零,跳转。JNZ为非零跳转
LCALL、ACALL SUB1---CALL #SUB1
SUB1: JB BUSY,SUB1 ;确信模块空闲(BUSY=0)
MOV P1,A ;向总线送数
NOP ;等待数据总线稳定
SETB REQ ;置模块REQ端为高电平(REQ=1),向模块发请求命令
HE3: JNB BUSY,HE3 ;等待模块响应(BUSY =1)
CLR REQ ;撤消REQ请求信号,数据输入结束
RET ;返回
2) 写模块子程序(单线延时方式)
---该程序仅使用REQ一条控制线方式对模块进行写操作。在MPU 的 I/O口短缺的情况下非常适用。
SUB2: MOV P1,A ;向总线送数
NOP ;等待数据总线稳定
SETB REQ ;置模块REQ端为高电平(REQ=1),向模块发请求命令
LCALL DALEY1 ;调延时子程序DALEY1等待模块响应 *1
CLR REQ ;撤消REQ请求信号,数据输入结束
LCALL DALEY2 ;调延时子程序DALEY2等待模块内部处理完成 *2
RET ;返回
注:*1、延时时间参照表—4中的Tb及Trt
*2、延时时间参照表—4中的Ts1及Ts2
3) 以下程序坐标值为OCMJ4X8B模块坐标
3.1写汉字程序
---该程序显示一个汉字“啊”(区位码为1001H )
MOV A,#0F0H ;选显示汉字命令字
ACALL SUB1 ;调用写子程序
MOV A,#02H ;O2H,XX,16*16点阵为单位的屏幕坐标
ACALL SUB1 ;调用写子程序
MOV A,#00H ;00H,YY,16*16点阵为单位的屏幕坐标
ACALL SUB1 ;调用写子程序
MOV A,#10H ;10H,QQ,GB2312汉字区位码高位
ACALL SUB1 ;调用写子程序
MOV A,#01H ;01H,WW,GB2312汉字区位码低位
ACALL SUB1 ;调用写子程序
3.2写8*16 ASCII码程序
---该程序显示一个8*16 ASCⅡ码 “A” :
MOV A,#0F9H ;选显示8*16 ASCII字符命令字
ACALL SUB1 ;调用写子程序
MOV A,#04H ;04H,XX,8*8点阵为单位的屏幕坐标值X
ACALL SUB1
MOV A,#00H ;00H,YY,1*1点阵为单位的屏幕坐标值Y
ACALL SUB1
MOV A,#41H ;AS,ASCII字符代码“A”
ACALL SUB1
注:X坐标(本例中的 #04H)与ASCⅡ码中规定的相同,Y坐标(本例中的 #00H)以点阵单元为单位。
3.3写8*8 ASCII码程序
---该程序显示一个8*8 ASCⅡ码 “A” :
MOV A,#0F1H ;选显示8*8 ASCII字符命令字
ACALL SUB1 ;调用写子程序
MOV A,#04H ;04H,XX,8*8点阵为单位的屏幕坐标值X
ACALL SUB1
MOV A,#00H ;00H,YY,1*1点阵为单位的屏幕坐标值Y
ACALL SUB1
MOV A,#41H ;AS,ASCII字符代码“A”
ACALL SUB1
3.4绘图一点(1*1点阵)程序
MOV A,#0F2H ;选显示位点阵命令字
ACALL SUB1 ;调用写子程序
MOV A,#20H ;20H,XX,以1*1点阵为单位的屏幕坐标值X
ACALL SUB1
MOV A,#00H ;00H,YY,以1*1点阵为单位的屏幕坐标值Y
ACALL SUB1
3.5绘图一横线(1*8点阵)程序
MOV A,#0F3H ;选显示字节点阵命令字
ACALL SUB1 ;调用写子程序
MOV A,#04H ;04H,XX,以1*8点阵为单位的屏幕坐标值X
ACALL SUB1
MOV A,#00H ;00H,YY,以1*1点阵为单位的屏幕坐标值Y
ACALL SUB1
MOV A,#0FH ;OFH,为输入字节数据,1为黑点,0为白点
ACALL SUB1
3.6清屏程序
MOV A,#0F4H ;选清屏指令命令字
ACALL SUB1 ;调用写子程序
4) 初始化程序
ORG 000H ;程序首址
LJMP 100H ;跳过中断区
ORG 100H
MOV SP,#60H ;设堆栈
CLR REQ ;REQ=0
SETB BUSY ;BUSY=1
5) 汉字内码转换成区位码程序
---该程序将外部数据(如上位机)中的汉字内码转换成区位码以便模块直接显示。
R5--存放机内码高位;R6--存放机内码低位
SUB7: PUSH A ;把机内码高位放到A累加器
CLR C ;
MOV A,R5 ;
SUBB A,#0A0H ;机内码减A0H为国标区码
MOV R5,A ;把转换好的区码放回R5
CLR C
MOV A,R6 ;把机内码低位放到A累加器
SUBB A,#0A0H ;机内码减A0H为国标位码
MOV R6,A ;把转换好的位码放回R6
POP A
RET 答 1: 把你的程序转化成430的程序难度不大,只是你的是汇编程序,还是先把你的程序转化为C程序吧 答 2: 呵呵你是真高人 汇编那么好 嘿嘿 答 3: 什么东西
汇编太麻烦 了 答 4: 51---------------------------------430
MOV DST,SRC--------MOV SRC,DST ;+“.B ”字节,+“.W”字
SETB REQ---------------BIS.B #001H,&P1OUT ;将P1端口的“0”位置1,清零用BIC
430的IO口为8位,双向、位独立控制。P1OUT是P1口的位输出寄存器,相应的还有位输入寄存器P1IN。为了选择端口位的输入输出方式,要设置位方向寄存器P1DIR。P1DIR的相应位为“1”,则该位为输出,否则为输入。如:MOV.B #072H,&P1DIR
JNB BUSY,HE3------JZ HE3 ;状态寄存器“Z”位为零,跳转。JNZ为非零跳转
LCALL、ACALL SUB1---CALL #SUB1
共2条
1/1 1 跳转至页
回复
有奖活动 | |
---|---|
【有奖活动】分享技术经验,兑换京东卡 | |
话不多说,快进群! | |
请大声喊出:我要开发板! | |
【有奖活动】EEPW网站征稿正在进行时,欢迎踊跃投稿啦 | |
奖!发布技术笔记,技术评测贴换取您心仪的礼品 | |
打赏了!打赏了!打赏了! |
打赏帖 | |
---|---|
与电子爱好者谈读图四被打赏50分 | |
与电子爱好者谈读图二被打赏50分 | |
【FRDM-MCXN947评测】Core1适配运行FreeRtos被打赏50分 | |
【FRDM-MCXN947评测】双核调试被打赏50分 | |
【CPKCORRA8D1B评测】---移植CoreMark被打赏50分 | |
【CPKCORRA8D1B评测】---打开硬件定时器被打赏50分 | |
【FRDM-MCXA156评测】4、CAN loopback模式测试被打赏50分 | |
【CPKcorRA8D1评测】--搭建初始环境被打赏50分 | |
【FRDM-MCXA156评测】3、使用FlexIO模拟UART被打赏50分 | |
【FRDM-MCXA156评测】2、rt-thread MCXA156 BSP制作被打赏50分 |