单片机 试编写一个子程序

作者&投稿:苦妮 (若有异议请与网页底部的电邮联系)
写一个单片机C语言子程序,~

51单片机具有位操作功能。
C51语言,也就具有不同于普通C语言的特殊能力。
用C51解决这个问题,不用像楼上那样麻烦。
定义一个字节的位寻址变量,就简单多了。
下列程序,已经得到检验。
//-----------------------------------------------
uchar bdata i; //在位寻址区定义变量.
sbit i0 = i^0; //定义它的8个位.
sbit i1 = i^1;
sbit i2 = i^2;
sbit i3 = i^3;
sbit i4 = i^4;
sbit i5 = i^5;
sbit i6 = i^6;
sbit i7 = i^7;

bit tt; //定义一个临时变量.
//-----------------------------------------------
void change(uchar date)
{
i = date; //取来数据.

tt = i0; //交换两个位.
i0 = i7;
i7 = tt;

tt = i1;
i1 = i6;
i6 = tt;

tt = i2;
i2 = i5;
i5 = tt;

tt = i3;
i3 = i4;
i4 = tt;

date = i; //送回去.
}


用手机发的

unsigned char *p; //*p为指针,即为R1
unsigned char A; //设置任一变量代替A,用来取子程序返回原数值

//子程序,此函数调用前必须先给*p批针取外部RAM的低地址
unsigned char date(unsigned char *x)
{
unsigned char a;
a=*p&0xf0h; //取低地址的高4位
p++; //P指向外部RAM下一地址
a=a|(*p>>4); //先取高地址的高4位并移到低4位
//再和低地址的高4位或下
return(a);
}

//在主程序中
void main(void)
{
p=&adder; //adder为外部RAM连续单元的低地址
A=date(*p);
}

假设RI指向的片外单元为0001H-0002H
MOV R1,#0001H
MOVX A,@R1
ANL A,#0F0H
SWAP A
MOV R0,A
INC R1
MOVX A,@R1
ANL A,#0F0H
XRL A,R0

好了!


合肥市18569899919: 单片机 试编写一个子程序 -
滕芬奥米: 假设RI指向的片外单元为0001H-0002H MOV R1,#0001H MOVX A,@R1 ANL A,#0F0H SWAP A MOV R0,A INC R1 MOVX A,@R1 ANL A,#0F0H XRL A,R0 好了!

合肥市18569899919: 写一个单片机C语言子程序, -
滕芬奥米: uchar change(uchar date) { uchar i,ab; ab=date; ACC=0; { ACC=(ab&0x01); ACC<<=7; i=ACC; ab=date; ACC=0; ACC= ab&0x02; ACC<<=5; i=ACC|i; ab=date; ACC=0; ACC= ab&0x04; ACC<<=3; i=ACC|i; ab=date; ACC=0; ACC= ab&...

合肥市18569899919: 编一段单片机子程序,将内存30H - 40H内容移入50H - 60H -
滕芬奥米: 子程序是CRAM,子程序如下: CRAM:MOV R0 , #30H MOV R1 , #50H MOV R2 , #10H LOOP:MOV A , @R0 MOV @R1 , A INC R0 INC R1 DJNZ R2 , LOOP RET 请及时采纳

合肥市18569899919: 单片机中显示子程序的编程怎样编写 -
滕芬奥米: void main() {hardware_init();while(1){if(display_time == 1){display();}}} void display() {} 其中display_time 是由定时器中断或者其他显示触发.display()函数是显示的驱动了

合肥市18569899919: 单片机,试编写延时1min的子程序,设晶振频率为12MHz -
滕芬奥米: /* 这样可以是可以,但还真没见过这样用的.下面你参考一下*/void delay60s(void) //误差 0us {unsigned char a,b,c,d,n;for(d=239;d>0;d--)for(c=157;c>0;c--)for(b=228;b>0;b--)for(a=2;a>0;a--);for(n=1;n>0;n--); }

合肥市18569899919: 单片机如何编写一个启动与暂停的子程序 -
滕芬奥米: 你可以做个按键组合,比如 第一个和第四个同时按下就是启动采集温度并显示,第二和第三按键同时按下就是采集温度但是不显示数据.这个程序应该是非常好做的.

合肥市18569899919: 若单片机的主频为12MHz,试编写延时为40us的延时子程序? -
滕芬奥米: 不如使用T1,方式1 解答:Mc=2^16-Tc/Tp=65536-20ms/(12/12*10^6)=65536-20000=B1E0(H)TMOD=#10(H)初始化程序段为mov TMOD,#10Hmov TH1,#0B1Hmov TL1,#E0Hsetb TR1... ... 就写这么多吧,你的悬赏分数让我觉得我写这些已经足够了! 请参考

合肥市18569899919: 1, 设单片机晶振频率为12MHZ,试编写一延时1s的子程序. -
滕芬奥米: //----假设,系统工作于 12MHz/12T的传统51单片机下.#include <reg51.h> sbit Test = P1^0; void Delay_50ms(unsigned char Times) { while(Times -- ) { TH0 = 0x3C; //----装入初值,定时器0定时50ms TL0 = 0xB0; TR0 = 1; //-----启动定时器 while(!...

合肥市18569899919: 刚接触51单片机不知道怎么做...1)试编写程序,完成两个16位数的减法:5C3BH - 3D46H,结果存入内部RAM的30H和31H单元,31H单元存差的高8... -
滕芬奥米:[答案] 这都是最基本的程序,你可以找本教材看看,就明白了,看懂就行了.

合肥市18569899919: 如何写一段简洁高效的单片机C语言子程序,实现这样一个功能?
滕芬奥米: 1、首先调用,设置状态静态寄存器初值,计数静态寄存器初值;2、调用一次,检测一次,对比前次的静态变量,不同则计数增1后反回,相同则清除计数返回;3、再调用一次,检测一次,对比前次的静态变量,不同则计数增1后反回,相同则清除计数返回;4、最后调用一次,检测一次,作对比,相同则清除计数,不同则修改要更新的变量,改变状态静态变量,清除计数器,返回.

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网