大虾们帮忙看下这几个单片机的问题,小弟刚学,入个门先!!

kuaidi.ping-jia.net  作者:佚名   更新日期:2024-07-07
下面这个函数的具体功能是什么?小弟看不懂,求大虾们指导~小弟初学单片机,在此先谢谢了

void main_Write_COM( int CH)
{
A0=0; //这个应该和时序有关,要看A0定义。
CS_MAIN =0; //片选。使能芯片。
DPTR=CH; // DPTR = 发送的数据。
P2=DPH; // P2口输出要写出数据的高8位。 (DPTR的高8位)
WRB=0; // WRB是写使能,这两句产生一个上升沿。
WRB=1;
P2=DPL; // P2口输出写出数据的低8位。
WRB=0; // 上升沿写信号。
WRB=1;
CS_MAIN =1; //片选。禁止使能。
}

sbit P1_7=P1^7;//需要先声明各个位引脚,因为C语言不能直接给P1.7幅值
sbit P1_6=P1^6;
sbit P1_5=P1^5;
sbit P1_4=P1^4;
sbit P1_3=P1^3;

pp=pp<<6; //整型变量16位,移动6位,让最高位到D15位置
if(pp&0x8000) P1_7=1; //最高位幅值给P1.7
else P1_7=0;

pp=pp<<1; //左移一位,让次高位到最高位位置
if(pp&0x8000) P1_6=1; //次高位赋值给P1.6
else P1_6=0;

pp=pp<<1; //左移一位,让次高位到最高位位置
if(pp&0x8000) P1_5=1; //依次类推P1_5,P1_4.......
else P1_5=0;

pp=pp<<1; //左移一位,让次高位到最高位位置
if(pp&0x8000) P1_4=1; //依次类推P1_4.......
else P1_4=0;

pp=pp<<1; //左移一位,让次高位到最高位位置
if(pp&0x8000) P1_3=1; //依次类推P1_3.......
else P1_3=0;


}

MUL指令高位存B,低位存A,一楼的第一题
ADD B,@R0
ADDC A,#0
应该改为
ADD A,@R0
ADDC B,#0

第二题,16个数相加结果应该存在两个字节中,两字节除法很麻烦,不过因为被除数是16,即10H,所以除法就简单了,就是把16个数字的和整体右移四位就行了。

MOV DPTR,#BUF1
MOV R7,#0
MOV R6,#0

MOV R2,#16
LOOP: ;加和循环
MOV A,R6
ADD A,@DPTR
MOV R6,A
MOV A,R7
ADDC A,#0
MOV R7,A
INC DPTR
DJNZ R2,LOOP

LOOP2:
MOV R2,#4
MOV A,R7
RRC A
MOV R7,A
MOV A,R6
RRC A
MOV R6,A
DJNZ R2,LOOP2

DIV_OVER:
MOV A,R5
MOV DPTR,#BUF2
MOVX @DPTR,A

第三题
MOV R0,#DATA1
MOV R1,$DATA2
MOV R2,#20
LOOP:
MOV A,@R0
XCH A,@R1
MOV @R0,A
INC R0
INC R1
DJNZ R2,LOOP

第四题的意思应该是四个字节整体左移四位,高位部分移入40H

MOV R3,#4 ;左移四位

LOOP2:
MOV R0,#43H
MOV R2,#4 ;三个字节,加上40H,共四个字节
CLR C

LOOP1:
MOV A,@R0
RLC A
MOV @R0,A
DEC R0
DJNZ R2,LOOP1

DJNZ R3,LOOP2

第五题,一楼移反了

MOV R0,#DATA2
MOV DPTR,#DATA1
MOV R2,#50
LOOP:
MOVX A,@DPTR
MOVX @R0,A
INC R0
INC DPTR
DJNZ R2,LOOP

第一个:
MOV R0,#50H
MOV R1,#52H
MOV A,@R0
MOV B,#10
MUL AB
INC R0
ADD B,@R0
ADDC A,#0
MOV R1,B;低位放52H中
INC R1
MOV R1,A;高位放53H中

第二个:
MOV DPTR,#BUF1
MOVX A,@DPTR
MOV R2,N
LOOP:
INC DPTR
ADDC A,@DPTR
DJNZ R2,LOOP
MOV B,N
DIV AB
MOV DPTR,#BUF2
MOVX @DPTR,A

第三个:
MOV R0,#DATA1
MOV R1,$DATA2
MOV R2,#20
START:
MOV 30H,@R0
MOV 31H,@R1
MOV @R0,31H
MOV @R1,30H
INC R0
INC R1
DJNZ R2,START

第四个:
MOV R0,#41H
MOV R2,#03H
LOOP:
MOV A,@R0
SWAP A
INC RO
DJNZ R2,LOOP

(据我所知左移指令是循环移动的,我不知道哪部分是移出部分,所以只做了左移四位的那部分,学艺不精,谅解!!)

第五个:
MOV RO,#DATR1
MOV DPTR,#DATR2
MOV R2,#49
LOOP:
MOV A,@R0
MOVX @DPTR,A
INC R0
INC DPTR
DJNZ R2,LOOP

A欧,终于写完了!!!

  • 大虾们帮忙看下这几个单片机的问题,小弟刚学,入个门先!!
    答:MUL指令高位存B,低位存A,一楼的第一题 ADD B,@R0 ADDC A,#0 应该改为 ADD A,@R0 ADDC B,#0 第二题,16个数相加结果应该存在两个字节中,两字节除法很麻烦,不过因为被除数是16,即10H,所以除法就简单了,就是把16个数字的和整体右移四位就行了。MOV DPTR,#BUF1 MOV R7,#0 MOV...
  • 有关于单片机数据移位的问题,希望大虾们可以帮帮忙啊!!!小弟感激不尽...
    答:sbit P1_7=P1^7;//需要先声明各个位引脚,因为C语言不能直接给P1.7幅值 sbit P1_6=P1^6;sbit P1_5=P1^5;sbit P1_4=P1^4;sbit P1_3=P1^3;pp=pp<<6; //整型变量16位,移动6位,让最高位到D15位置 if(pp&0x8000) P1_7=1; //最高位幅值给P1.7 else P1_7=...
  • 51单片机毕设问题,大虾们速度啊···
    答:你这个毕设不会被评价为过于简单的(不过要看你的学校级别了,呵呵,这个问题不可回避)。因为有些学校单单一个51做的电子表就能通过答辩了。。。至于你说的两个人同时按抢答键的问题。。。个人拙见:以普通51us级的判断能力,不会出现绝对同时的。。。监测到一个按键按下后,屏蔽掉输入。但如果你...
  • 求助各位大瞎关于51单片机外部中断的问题
    答:实际上,外部中断工作在边沿触发方式的时候,第一次电平跳变触发后进入中断程序,然后硬件自动清除IE0中断标志位。但是在执行中断程序的过程中,如果中断引脚再次检测到电平跳变(负到高),那么IE0会被再次置1 。如果在退出中断程序之前没及时清0,那么就会再次引发一次中断。而按键的过程,不包括按下和...
  • 关于3个单片机互相通信的问题:::
    答:首先要确定好主机和从机,然后整体的电路图如下,最后还要注意一下软件的编程,要注意主机与从机之间的协议以及单片机串口通信的工作方式,一般是工作方式2或是3,主机发出命令,从机做出应答,这时候必须是主机发出的地址指令与从机的地址一致才行....
  • 请问大虾们一个问题:单片机中如何定义一个数组,保存按键的数值哦!比如...
    答:做一个全局变量 i,每次按键有效i就加一次,然后把键值赋予SM[i],等 i = 5时,在令 i = 0,再重新记后面五个数就行了
  • 关于51单片机的问题
    答:void cx(){ if(k==0)yanshi(10000);//消抖动延时10ms就够了,太长时间会闪烁 if(k==0)ge++;if(ge==10){ ge=0;shi++;} if(shi==10){ shi=0;bai++;} if(bai==10){ bai=0;qian++;} if(qian==10){ qian=0;wan++;} if(wan==10){ wan=0;} while(k==0)//松手检测...
  • 单片机STC89C52RC输出问题
    答:1、光耦的输入端有极性,一般光耦的LED端驱动电流不大,驱动电压1点几V,51足够用。所以:如PCB17图,VCC接1K电阻接1脚,2脚接IO口,试试,不行可减小电阻,但一定要有电阻!IO低电平时光耦输出。2、光耦输出端也有极性!测量和驱动时注意极性,电流从4脚进3脚出。3、你的开关(key)电路不要...
  • 关于51单片机电子钟硬件运行的问题
    答:你这样的情况原因基本有两个:一个是电路板虚焊了,数码管的不可靠导通。还有一个就是单片机外围电路(特别是电源和复位)有问题,造成单片机不能可靠复位运行程序,有时正常有时不正常。你试试看将单片机取下,接通电源看数码管的显示情况。再结合你的电路图分析一下电路板,排除虚焊。再上单片机上电后...
  • 有关单片机I/O端口的问题?
    答:楼主的说法不准确。除了P0,P2,P3可以作为外部总线之外,这4个IO口的功能可以定义为一样的。目前新式单片机中,除了P0口外,其它IO口全部有另外的功能,例如在P1口上增加了ADC功能或者新的定时器的输入等等。另外 做而论道 的说法不叫切合实际。代码解释:ANL P1,A P1的内容与A的内容相与 OR...