单片机问题,求教高手下面一段程序原理,希望能逐句给出解释,非常感谢

我是单片机新手(51),最近有个项目需要几段小程序,可是自己能力有限,希望高手帮忙,非常感谢~

uint shuchu(void)
{
unsigned char yt1; //0~65535
unsigned int yt;
yt1 = AD_Change(); //0~255
yt = yt1 * 5000.0 / 256.0;//乘以5000,应该是远远超过65535了.
return yt;
}

改成:
yt = yt1 * 19.53; //5000/256=19.53125,应该由人来计算,别让单片机犯难。

试试看。

数组定义有问题,把 unsigned char改 int 试试

#include<reg51.h>//头文件
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
void DelayMS(uint ms)//延时函数
{
uchar t;
while(ms--) for(t=0;t<120;t++);
}

void main(void)//主函数
{
uchar i;
P1=0xfe;//将P1口的八个管脚拉电平11111110,即P1.0为低,其他为高,点亮流水灯。
for(i=0;i<8;i++)
{
DelayMS(200);
P1=_crol_(P1,1);//将P1口的赋值循环左移,该语句执行一次,开始时由
11111110变成11111101,再执行一次,变成11111011,以此类推。可以看见流水灯动起来了。
}
P1=0xff;//全部变为高电平
P0=0x7f;//P0口电平拉为01111111
for(i=0;i<8;i++)
{
DelayMS(200);
P0=_cror_(P0,1);//循环右移,和循环左移原理相似
}
// DelayMS(200); //延时
}

有什么不懂得可以问,望采纳!!!!

1.头文件,里面主要是一些单片机端口、寄存器等的宏定义。
2.头文件,里面包含了移位函数,就是那个_cror_(右移)和_crol_(左移),把此句屏蔽,P1=_cror_(P1,1)和P0=_crol_(P0,1)处会报错的。
3、4.宏定义,用uint 代替unsigned int ,用uchar代替unsigned char,书写方便。
5.void DelayMS(uint ms)
{
.........
}
延时函数,uint ms 是函数的形参,具体延时多长时间自己定义。
6.主函数:
先定义了一个局部变量i,然后把0xfe赋值给P1口,然后进入for循环中,先延时,然后是向左移动一位,再延时,再移动,循环8次,把0xff赋值给P1口,把0x7f赋值给P0口,进入for循环中,这次是右移函数,循环8次。
程序执行完毕!
这个很简单的,自己多看看相关例程,就会很快掌握的。还有,好好看C语言编程!
最重要的是,采纳!!!!!

建议 去 我的领地 5d6d 的 proteus 论坛看看

那里有很多 单片机仿真实例,包括仿真图 和 源码
搜 5d6d 和 proteus 2个关键词

单片机问题,求教高手下面一段程序原理,希望能逐句给出解释,非常感谢
答:P1=0xfe;//将P1口的八个管脚拉电平11111110,即P1.0为低,其他为高,点亮流水灯。for(i=0;i<8;i++){ DelayMS(200);P1=_crol_(P1,1);//将P1口的赋值循环左移,该语句执行一次,开始时由 11111110变成11111101,再执行一次,变成11111011,以此类推。可以看见流水灯动起来了。} P1=0xff;...

请各位高手回答一下下面的单片机程序问题!谢谢!
答:该段程序执行该类指令总次数=250x200x10=500000 耗用时间 = 500000x2μs = 10^6μs =1s 若改为延时0.1 第三行指令改为 LOOP1: MOV R1, #01 若改为延时0.5s, 第三行指令改为 LOOP1: MOV R3, #05 若改为延时2s, 第三行指令改为 LOOP1: MOV R1, #20 ...

单片机定时器的一段程序:请高手解答,有关问题分别在下面程序中标出
答:51单片机有5 个中断,每个中断都 有一个入口地址,000BH是定时器T0的中断入口地址,当定时中凿骨捣髓产生时,程序AJMP ITRU,即执行ITRU开始的那段 子程序。HERE :SJMP HERE 表示程序反复在这条指令 。作用是等待定时中断的到来。初值装入2 次,决定于程序里的定时中断方式,TMOD=0,中定时方式0,13...

关于51单片机的几个问题: 经过一段时间的学习,对单片机有了初步的认...
答:作为第二功能使用时,各引脚的定义如表所示。值得强调的是,P3口的每一条引脚均可独立定义为第一功能的输入输出或第二功能。具体的要在用是时候才会更加深刻的了解!AT89C52和STC89C52rc除了厂商以外在编程时都是一样的,不用特别的在意,就是烧写程序的方式不同?stc89c52rc的rc好像是贴片单片机吧!其实...

求高手解答单片机问题。
答:25、假定(SP)=40H,(39H)=30H,(40H)=60H。执行下列指令:--题目有错,39H、40H,不是连续的单元,不能当做本题目的已知条件。POP DPH ,POP DPL后,DPTR的内容为( ),SP的内容是( )。26、单片机的堆栈栈顶由( SP )来指示,复位时起位置在( 07H )单元。27、单片机内部...

求高手解答单片机问题.
答:一、求高手解答单片机问题.程序数据 二、有关单片机的几个问题!跪求高手回答 1.执行CALL指令前SP=40H,A=30H,但是在SUBR中对SP压栈2009H,在执行RET指令后将2009H送回PC,造成单片机跳转到0x2009处继续执行指令,但这个位置不是程序中规定的指令开始地址,所以运行后A=30H,SP=42H 2.A是8位的...

单片机按键问题,求教高手。。。
答:void ANjian1(){ uchar i = 0;if(X == 0) { delay(5);if(X == 0) { i = 0;while(!X) { //等待按键释放.delay(5); //假设是延时5ms i++; //延时的次数.if (i >= 200) break; //已经按下一秒了,不等待了.} } } while(!X);if(i >= 100) { //...

一些关于单片机的问题,求高手解答
答:但是一般单片机和ARM都能够把I/O选择作为外部存储器的访问口,这时只要根据datasheet里的说明,把相应的线连上,CPU就能够根据你的指令自动在时序上配合,使得访问外部设备就像访问内部ram一样,这样做的好处就是节省CPU时间。7...unsigned char 后面加 idata 就可以了 ...

各位单片机高手,哪位帮我分析一下下面这个程序,问题出...
答:回答:首先给你解释一下“<<”位移符的作用: 因为你的P1=0xfe,二进制数据就是11111110,左移一位之后为11111100,0往左移了一位,但是最低位系统自动以0补齐,而0x7f的二进制数据位01111111,所以if语句是永远进入不了的。 当然,针对此问题,C51给出了一个解决方案: 使用_crol_()函数可解决此问题...

单片机高手请进 请给下列程序后面补充一些注释吧 我对下程序搞不懂...
答:你提供的程序一点也看不懂,重新编一个 ORG 0000H LJMP START ORG 0030H START:JNB P1.1,L1 ;高位有水,转L1 CLR P1.7 ;高位无水,启动电动机 LACLL DE10S ;延时10S SJMP START L1: SETB P1.7 ;电动机停转 LACLL DE10S ;延时10S JNB...

IT评价网,数码产品家用电器电子设备等点评来自于网友使用感受交流,不对其内容作任何保证

联系反馈
Copyright© IT评价网