共2条
1/1 1 跳转至页
各位老师帮我看看这段汇编改C这么写对吗?
问
TCL549: MOV R3,#08H
CLR CS
READ: CLR DCLK
NOP
MOV C,DIN
SETB DCLK
RLC A
DJNZ R3,READ
RET
END
用C改完我是这么写的我是菜鸟见笑啊。
for(i=8;i>0;i--)
{
cs=0;
if(addr&0x80)
{din=1;}
else
{din=0;}
dclk=0;
_nop_();
addr=(addr<<1)+1;
dclk=1;
}
}
如果不正确怎么写才正确呀,那位老师帮我写个正确的行吗? 答 1: 那为帮忙看看对不谢谢啦 答 2: 晕难道没人会吗!!!哎 答 3: 按找你给的汇编代码,应该是这样的:void read_tlc549(void)
{
unsigned char i,result;
cs=0;
for(i=8;i>0;i--)
{
dclk=0;
dclk=0; //代替nop指令
if(din)
{
result++;
}
dclk=1;
result<<=1;
}
return result;
}
但是常规的读串行数据的操作,最后一位是不移的,应该像下面这样:
void read_tlc549(void)
{
unsigned char i,result;
cs=0;
for(i=8;i>0;i--)
{
dclk=0;
result<<=1; //代替nop指令
if(din)
{
result++;
}
dclk=1;
}
return result;
}
你的数据格式具体是什么,我也不清楚,或许是你汇编中写的那样也难说。 答 4: 谢谢您非常感谢呵呵就是一个A/D转换的程序,通过A/D的I/O口向MCU发送数据然后MCU处理后用数码显示,汇编我写好了可是用C写就蒙了。感谢 答 5: 汇编全程序CS BIT P1.5
LOAD BIT P1.2
DIN BIT P1.0
DCLK BIT P1.1
DOUT BIT P3.3
;**********************************
AD_DATA EQU 036H ;采集数据缓冲区
TIMER DATA 030H
TIMER1 DATA 031H
TIMER2 DATA 032H
TIMER3 DATA 033H
;***********************************
ORG 0000H
JMP MAIN
ORG 0030H
MAIN: MOV P1,#61H ;禁用其它芯片
;aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
TCL549: MOV R3,#08H ;计数器
CLR CS ;开启芯片
ACALL DELAY ;延时
READ: CLR DCLK ;读549芯片数据
NOP
MOV C,DIN
SETB DCLK
RLC A
DJNZ R3,READ
MOV AD_DATA,A
LCALL DELAY_1S ;延时
SJMP START ;调数码管显示程序
;aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
;*********************************************
;延时子程序
;**********************************************
DELAY:MOV R5,#01H
H0: MOV R7,#0FFH
H1: DJNZ R7,H1
DJNZ R5,H0
RET
;***********************************
;数码管显示程序
;***********************************
START:
SETB CS ;禁用549芯片
NOP
mov p1,#60h ;禁止其它芯片
CLR DIN ;初始化CH451
SETB DCLK
SETB DIN
SETB LOAD
SETB DOUT
NOP
MOV B,#04H ;设置CH451
MOV A,#03H ;关看门狗开显示键盘
nop
LCALL WRITE
NOP
LCALL DELAY
MOV B,#09H ;显示位置
START1: MOV R5,#00H ;加载字数据1
TT1: LCALL ZHUAN
LCALL WRITE ;将数据送入数码管显示
LCALL DELAY_1S
INC R5
INC B ;显示位置加一
CJNE R5,#02H,TT1
LCALL DELAY_1S
JMP MAIN ;返回显示采集的数据
TAB:
DB 03FH ;0
DB 006H ;1
DB 05BH ;2
DB 04FH ;3
DB 066H ;4
DB 06DH ;5
DB 07DH ;6
DB 07H ;7
DB 07FH ;8
DB 06FH ;9
DB 77H ;A
DB 07CH ;B
DB 039H ;C
DB 5EH ;D
DB 079H ;E
DB 071H ;F
;*****************************************
;写数据到 ch451
;******************************************
WRITE:
PUSH ACC
CLR EX0
CLR LOAD
MOV R7,#08H
WRITE_1:
RRC A
CLR DCLK
MOV DIN,C
SETB DCLK
DJNZ R7,WRITE_1
MOV A,B
MOV R7,#004H
WRITE_2:
RRC A
CLR DCLK
MOV DIN,C
SETB DCLK
DJNZ R7,WRITE_2
SETB LOAD
SETB EX1
POP ACC
RET
;**********************************
DELAY_1S:
MOV TIMER1,#1
TEST_DYA: MOV TIMER2,#255
TEST_DYA1: MOV TIMER3,#255
TEST_DYA2: NOP
NOP
DJNZ TIMER3,TEST_DYA2
DJNZ TIMER2,TEST_DYA1
DJNZ TIMER1,TEST_DYA
RET
;*************************************
;将采集数据拆为为半字节
;**************************************
ZHUAN: MOV A,AD_DATA
SWAP A
MOV AD_DATA,A
ANL A,#0FH ;屏蔽高四位
MOV DPTR,#TAB
MOVC A,@A+DPTR
RET
END
请问用a表示的那段用汇编怎么写啊,那位高手指点一下。
答 6: 用A表示的那段汇编用C怎么写啊 答 7: 什么叫做“用A表示的那段”? 答 8: 你好就是在程序里面有一段
;aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
TCL549:
要改成C语言的部分
;aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
我在学习C51所以想在用C一边着段程序
谢谢帮帮忙
答 9: 有人会不?谢谢啦 答 10: ? 答 11: 还是你自己改吧。估计没人会那么有空去帮你改的除非他自己想学习一下。
CLR CS
READ: CLR DCLK
NOP
MOV C,DIN
SETB DCLK
RLC A
DJNZ R3,READ
RET
END
用C改完我是这么写的我是菜鸟见笑啊。
for(i=8;i>0;i--)
{
cs=0;
if(addr&0x80)
{din=1;}
else
{din=0;}
dclk=0;
_nop_();
addr=(addr<<1)+1;
dclk=1;
}
}
如果不正确怎么写才正确呀,那位老师帮我写个正确的行吗? 答 1: 那为帮忙看看对不谢谢啦 答 2: 晕难道没人会吗!!!哎 答 3: 按找你给的汇编代码,应该是这样的:void read_tlc549(void)
{
unsigned char i,result;
cs=0;
for(i=8;i>0;i--)
{
dclk=0;
dclk=0; //代替nop指令
if(din)
{
result++;
}
dclk=1;
result<<=1;
}
return result;
}
但是常规的读串行数据的操作,最后一位是不移的,应该像下面这样:
void read_tlc549(void)
{
unsigned char i,result;
cs=0;
for(i=8;i>0;i--)
{
dclk=0;
result<<=1; //代替nop指令
if(din)
{
result++;
}
dclk=1;
}
return result;
}
你的数据格式具体是什么,我也不清楚,或许是你汇编中写的那样也难说。 答 4: 谢谢您非常感谢呵呵就是一个A/D转换的程序,通过A/D的I/O口向MCU发送数据然后MCU处理后用数码显示,汇编我写好了可是用C写就蒙了。感谢 答 5: 汇编全程序CS BIT P1.5
LOAD BIT P1.2
DIN BIT P1.0
DCLK BIT P1.1
DOUT BIT P3.3
;**********************************
AD_DATA EQU 036H ;采集数据缓冲区
TIMER DATA 030H
TIMER1 DATA 031H
TIMER2 DATA 032H
TIMER3 DATA 033H
;***********************************
ORG 0000H
JMP MAIN
ORG 0030H
MAIN: MOV P1,#61H ;禁用其它芯片
;aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
TCL549: MOV R3,#08H ;计数器
CLR CS ;开启芯片
ACALL DELAY ;延时
READ: CLR DCLK ;读549芯片数据
NOP
MOV C,DIN
SETB DCLK
RLC A
DJNZ R3,READ
MOV AD_DATA,A
LCALL DELAY_1S ;延时
SJMP START ;调数码管显示程序
;aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
;*********************************************
;延时子程序
;**********************************************
DELAY:MOV R5,#01H
H0: MOV R7,#0FFH
H1: DJNZ R7,H1
DJNZ R5,H0
RET
;***********************************
;数码管显示程序
;***********************************
START:
SETB CS ;禁用549芯片
NOP
mov p1,#60h ;禁止其它芯片
CLR DIN ;初始化CH451
SETB DCLK
SETB DIN
SETB LOAD
SETB DOUT
NOP
MOV B,#04H ;设置CH451
MOV A,#03H ;关看门狗开显示键盘
nop
LCALL WRITE
NOP
LCALL DELAY
MOV B,#09H ;显示位置
START1: MOV R5,#00H ;加载字数据1
TT1: LCALL ZHUAN
LCALL WRITE ;将数据送入数码管显示
LCALL DELAY_1S
INC R5
INC B ;显示位置加一
CJNE R5,#02H,TT1
LCALL DELAY_1S
JMP MAIN ;返回显示采集的数据
TAB:
DB 03FH ;0
DB 006H ;1
DB 05BH ;2
DB 04FH ;3
DB 066H ;4
DB 06DH ;5
DB 07DH ;6
DB 07H ;7
DB 07FH ;8
DB 06FH ;9
DB 77H ;A
DB 07CH ;B
DB 039H ;C
DB 5EH ;D
DB 079H ;E
DB 071H ;F
;*****************************************
;写数据到 ch451
;******************************************
WRITE:
PUSH ACC
CLR EX0
CLR LOAD
MOV R7,#08H
WRITE_1:
RRC A
CLR DCLK
MOV DIN,C
SETB DCLK
DJNZ R7,WRITE_1
MOV A,B
MOV R7,#004H
WRITE_2:
RRC A
CLR DCLK
MOV DIN,C
SETB DCLK
DJNZ R7,WRITE_2
SETB LOAD
SETB EX1
POP ACC
RET
;**********************************
DELAY_1S:
MOV TIMER1,#1
TEST_DYA: MOV TIMER2,#255
TEST_DYA1: MOV TIMER3,#255
TEST_DYA2: NOP
NOP
DJNZ TIMER3,TEST_DYA2
DJNZ TIMER2,TEST_DYA1
DJNZ TIMER1,TEST_DYA
RET
;*************************************
;将采集数据拆为为半字节
;**************************************
ZHUAN: MOV A,AD_DATA
SWAP A
MOV AD_DATA,A
ANL A,#0FH ;屏蔽高四位
MOV DPTR,#TAB
MOVC A,@A+DPTR
RET
END
请问用a表示的那段用汇编怎么写啊,那位高手指点一下。
答 6: 用A表示的那段汇编用C怎么写啊 答 7: 什么叫做“用A表示的那段”? 答 8: 你好就是在程序里面有一段
;aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
TCL549:
要改成C语言的部分
;aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
我在学习C51所以想在用C一边着段程序
谢谢帮帮忙
答 9: 有人会不?谢谢啦 答 10: ? 答 11: 还是你自己改吧。估计没人会那么有空去帮你改的除非他自己想学习一下。
共2条
1/1 1 跳转至页
回复
有奖活动 | |
---|---|
【有奖活动】分享技术经验,兑换京东卡 | |
话不多说,快进群! | |
请大声喊出:我要开发板! | |
【有奖活动】EEPW网站征稿正在进行时,欢迎踊跃投稿啦 | |
奖!发布技术笔记,技术评测贴换取您心仪的礼品 | |
打赏了!打赏了!打赏了! |
打赏帖 | |
---|---|
vscode+cmake搭建雅特力AT32L021开发环境被打赏30分 | |
【换取逻辑分析仪】自制底板并驱动ArduinoNanoRP2040ConnectLCD扩展板被打赏47分 | |
【分享评测,赢取加热台】RISC-V GCC 内嵌汇编使用被打赏38分 | |
【换取逻辑分析仪】-基于ADI单片机MAX78000的简易MP3音乐播放器被打赏48分 | |
我想要一部加热台+树莓派PICO驱动AHT10被打赏38分 | |
【换取逻辑分析仪】-硬件SPI驱动OLED屏幕被打赏36分 | |
换逻辑分析仪+上下拉与多路选择器被打赏29分 | |
Let'sdo第3期任务合集被打赏50分 | |
换逻辑分析仪+Verilog三态门被打赏27分 | |
换逻辑分析仪+Verilog多输出门被打赏24分 |