单片机程序阅读

合集下载

单片机程序

单片机程序
led=0xfe; //左移初始值定位
led1=0x7f;
P0=led; //输出
P1=led1;
ys1ms(120); //延时
for(i=1;i<8;i++) //设置移动7次
{
a=led<<i;//灯左移i位
P0=a; //依次点亮
b=led1>>i;
case 0xfd:rlszy();break;//扫描状态标志,为2时,第2种效果
case 0xfb:rsdzmyy();break;//扫描状态标志,为3时,第3种效果
case 0xf7:rlsnwyd();break; //扫描状态标志,为4时,第4种效果
P1=b;
ys1ms(150);
}
}
//按键3效果程序:3灯走马右移函
rsdzmyy()
{
P0=0x1f;//00011111
P1=0xff;//11111111
ys1ms(80);
P0=0x8f;//10001111
P1=0xfe;//11111110
}
}
if(P2==0xfd) //11111101 按键2
{
ys1ms(10);
if(P2==0xfd)
{
flag=0xfd;
while(P2==0xfd);
}
}
if(P2==0xfe) //11111110 按键1
{
P1=0xff;
ys1ms(300);
P0=0xe7;//11100111
P1=0xe7;
ys1ms(90);

单片机c语言实例程序300篇

单片机c语言实例程序300篇

单片机c语言实例程序300篇单片机C语言【程序1】题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?1.程序分析:可填在百位、十位、个位的数字都是1、2、3、4。

组成所有的排列后再去掉不满足条件的排列。

2.程序源代码:main(){inti,j,k;printf("\n");for(i=1;i<5;i++)/某以下为三重循环某/for(j=1;j<5;j++)for(k=1;k<5;k++){if(i!=k&&i!=j&&j!=k)/某确保i、j、k三位互不相同某/printf("%d,%d,%d\n",i,j,k);}}==============================================================【程序2】题目:企业发放的奖金根据利润提成。

利润(I)低于或等于10万元时,奖金可提10%;利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可可提成7.5%;20万到40万之间时,高于20万元的部分,可提成5%;40万到60万之间时高于40万元的部分,可提成3%;60万到100万之间时,高于60万元的部分,可提成1.5%,高于100万元时,超过100万元的部分按1%提成,从键盘输入当月利润I,求应发放奖金总数?1.程序分析:请利用数轴来分界,定位。

注意定义时需把奖金定义成长整型。

2.程序源代码:main()单片机C语言{longinti;intbonu1,bonu2,bonu4,bonu6,bonu10,bonu;canf("%ld",&i);bonu1=100000某0.1;bonu2=bonu1+100000某0.75;bonu4=bonu2+200000某0.5;bonu6=bonu4+200000某0.3;bonu10=bonu6+400000某0.15;if(i<=100000)bonu=i某0.1;eleif(i<=200000)bonu=bonu1+(i-100000)某0.075;eleif(i<=400000)bonu=bonu2+(i-200000)某0.05;eleif(i<=600000)bonu=bonu4+(i-400000)某0.03;eleif(i<=1000000)bonu=bonu6+(i-600000)某0.015;elebonu=bonu10+(i-1000000)某0.01;printf("bonu=%d",bonu);}============================================================ ==【程序3】题目:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?1.程序分析:在10万以内判断,先将该数加上100后再开方,再将该数加上268后再开方,如果开方后的结果满足如下条件,即是结果。

单片机程序

单片机程序
{
unsigned char led;
led=0xff;
P0=led;
led=led<<2;
Delay10ms(50);
if(P0==0x00)
{
P0=0xff;
}
}
void Delay10ms(unsigned int c)
{
unsigned int a,b;
led=led|0x01;
Delay(50);
}
for(i=7;i>0;i--)
{
P0=led;
Delay(10);
led=led>>1;
led=led|0x80;
Delay(10);
}
}
}
void Delay(unsigned int c)
void main()
{
unsigned char num;
unsigned int i;
num=0x01;
for(i=10;i>0;i--)
{
P0=num;
delay(50);
num=_crol_(num,1);
}
}
}
void Delay10ms(unsigned int c)
{
unsigned char a,b;
for(;c>0;c--)
{
for(b=38;b>0;b--)
{
for(a=130;a>0;a--);
}
}
}
流水灯5小综合
#include<reg51.h>

《单片机》读程序题题库答案1

《单片机》读程序题题库答案1

四、阅读下列程序,注释并填写指令执行后的结果(每题10分)1、 ORG 0LJMP START ;跳转到(PC)=0030H处ORG 30HSTART:MOV R0,#20H ;#20H->R0 (R0)=20HMOV R1,#30H ; #30H->R1 (R1)=30HMOV A,R0 ;(R0)->A (A)=20HADD A,#36H ;(A)+#36H->A (A)=56HMOV P1,A ;(A)->P1 (P1)=56HINC R0 ;(R0)+1->R0 (R0)=21HINC R1 ;(R1)+1->R0 (R1)=31HANL A,R1 ;(A)&(R1)->A (A)=10HSWAP A ;累加器A的高低4位交换 (A)=01HPUSH ACC ;累加器A内容压栈MOV P1,A ;(A)->P1 (P1)=01HPOP B ;堆栈内容出栈到B寄存器 (B)=01HMOV R0,A ;(A)->R0 (R0)=01HMOV DPTR,#2200H ;#2200H->DPTR (DPTR)=2200HSETB C ;1->Cy (Cy)=1ADDC A,#0 ;(A)+0+(Cy)->A (A)=02HMOVX @DPTR,A ;(A)->(DPTR) (2200H)=02HEND(R0)= 01H (R1)= 31H (P1)= 01H(B)= 01H (2200H)= 02H2、 ORG 0LJMP START ;跳转到(PC)=0030H处ORG 30HSTART:MOV SP,#50H ;#50H->SP (SP)=50H第1页共57页MOV R2,#10H ;#10H->R2 (R2)=10HMOV DPTR,#3000H ;#3000H->DPTR (DPTR)=3000HCRL A ;0->A (A)=0LOOP: MOVX @DPTR,A ;(A)->(DPTR)INC DPTR ;(DPTR)+1->DPTRDJNZ R2,LOOP ;(R2)-1->R2 若(R2)不等于零则转移到LOOP处INC DPH ;(DPH)+1->DPH (DPH)=31H (R2)=00H (DPL)=10H INC DPH ;(DPH)+1->DPH (DPH)=32HMOV 20H,#36H ;#36H->(20H) (20H)=36HSETB 00H ;位地址00H置1 20H.0=1 (20H)=37HMOV A,20H ;(20H)->A (A)=37HMOVX @DPTR,A ;(A)->(DPTR) (DPTR)=3210H (3210H)=37HINC A ;(A)+1->A (A)=38HINC A ;(A)+1->A (A)=39HPUSH ACC ;累加器A内容压栈 (SP)=51HXCH A,R2 ;累加器A的内容与R2内容互换 (A)=00H (R2)=39H POP DPH ;堆栈内容弹到DPH (DPH)=39HADD A,#55H ;(A)+#55H->A (A)=55HPUSH ACC ;累加器A内容压栈END(A)= 55H (R2)= 39H (20H)= 37H (DPTR)= 3910H (SP)= 51H3、 ORG 0LJMP START ;跳转到(PC)=0030H处ORG 30HSTART:MOV R0,#30H ;#30H->R0 (R0)=30HMOV A,#12H ;#12H->A (A)=12HSETB C ;(Cy)=1ADDC A,R0 ;(A)+(R0)+Cy->A (A)=43HMOV @R0,A ;(A)->(R0) (30H)=43H第2页共57页SWAP A ;累加器A高低4位交换 (A)=34HINC A ;(A)+1->A (A)=35HMOV DPTR,#2000H ;#2000H->DPTR (DPTR)=2000HINC DPH ;(DPH)+1->DPH (DPH)=21HMOV P1,A ;(A)->P1 (P1)=35HINC A ;(A)+1->A (A)=36HMOVX @DPTR,A ;(A)->(DPTR) (2100H)=36HXCH A,R0 ; (A) R0 (A)=30H (R0)=36HRL A ;累加器A内容循环左移 (A)=60HPUSH ACC ;累加器A的内容入栈RL A ;累加器A内容循环左移 (A)=0C0HPOP ACC ;堆栈内容弹出到累加器A (A)=60HEND(A)= 60H (R0)= 36H (DPTR)= 2100H(P1)= 35H (30H)= 43H4、 ORG 0LJMP START ;跳转到(PC)=0030H处ORG 30HSTART: MOV SP,#50H ;#50H->SP (SP)=50HMOV DPTR,#3000H ;#3000H->DPTR (DPTR)=3000HMOV R0,#20H ;#20H->R0 (R0)=20HMOV A,#23H ;#23H->A (A)=23HMOV R2,#0FH ;#0FH->R2 (R2)=0FHSETB 01H ;置位20H.1 (20H.1)=1SETB C ;置位Cy (Cy)=1ADDC A,@R0 ;(A)+((R0))+Cy->A (A)=26HINC R0 ;(R0)+1->R0 (R0)=21HMOV @R0,A ;(A)->((R0)) (21H)=26HLOOP: DJNZ R2, LOOP ;(R2)-1->R2 若R2内容不等于零则转移 SWAP A ;累加器A内容的高低4位交换 (A)=62H PUSH ACC ;累加器A内容入栈INC DPH ;(DPH)+1->DPH (DPH)=31HMOVX @DPTR,A ;(A)->(DPTR) (3100H)=62H第3页共57页POP B ;堆栈内容弹出到B (B)=62HRR A ;累加器A内容循环右移 (A)=31HADD A,B ;(A)+(B)->A (A)=93HMOV P1,A ;(A)->P1 (P1)=93HEND(21H)= 26H (R2)= 00H (A)= 93H (B)= 62H (3100H)= 62H5、 ORG 0LJMP START ;跳转到(PC)=0030H处ORG 30HSTART: MOV DPTR,#1000H ;#1000H->DPTR (DPTR)=1000HMOV A,#13H ;#13H->A (A)=13HMOV R0,#20H ;#20H->R0 (R0)=20HSETB C ;1->Cy (Cy)=1MOV @R0,A ;(A)->((R0)) (20H)=13HRLC A ;累加器A的内容带进位循环左移 (A)=27HXCH A,@R0 ;累加器A的内容与20H单元的内容互换 (A)=13H (20H)=27H PUSH ACC ;累加器A的内容入栈POP DPL ;堆栈内容弹出到DPL (DPL)=13HMOVX @DPTR,A ;(A)->(DPTR) (1013H)=13HDEC A ;(A)-1->A (A)=12HPUSH DPH ;DPH内容压栈POP B ;堆栈内容弹出到B (B)=10HADD A,B ;(A)+(B)->A (A)=22HMOV P1,A ;(A)->P1 (P1)=22HCLR A ;累加器A内容清零ADD A,B ;(A)+(B)->A (A)=10HEND(P1)= 22H (B)= 10H (20H)= 27H (DPTR)= 1013H (R0)= 20H6、 ORG 0LJMP START ;跳转到(PC)=0030H处ORG 30HSTART:MOV SP,#50H ;#50H->SP (SP)=50HMOV R0,#20H ;#20H->R0 (R0)=20H第4页共57页MOV R2,#10H ;#10H->R2 (R2)=10HMOV A,#24H ;#24H->A (A)=24HLOOP: MOV @R0,A ;(A)->((R0))INC R0 ;(R0)+1->R0DJNZ R2,LOOP ;(R2)-1->R2 若R2内容不等于0则跳转到LOOP处SETB 00H ;1->位地址为00H的位 (20H.0)=1 (20H)=25HSETB C ;1->Cy (Cy)=1ADDC A,#00H ;(A)+00H+(Cy)->A (A)=25HSWAP A ;累加器A内容高低四位互换 (A)=52HPUSH ACC ;累加器A内容压栈POP DPH ;堆栈内容弹出到DPH (DPH)=52HPUSH ACC ;累加器A内容压栈POP B ;堆栈内容弹出到B (B)=52HMOV A,R2 ;(R2)->A (A)=00HMOV DPL,A ;(A)->DPL (DPL)=00HMOV A,B ; (B)->A (A)=52HPUSH ACC ;累加器A内容压栈 (SP)=51HEND(A)= 52H (R2)= 00H (20H)= 25H (DPTR)= 5200H (SP)= 51H7、 ORG 0LJMP START ;跳转到(PC)=0030H处ORG 30HSTART: MOV DPTR,#2100H ;#2100H->DPTR (DPTR)=2100HCLR A ;0->A (A)=00HMOV R1,#30H ;#30H->R1 (R1)=30HSETB C ;1->Cy (Cy)=1ADDC A,R1 ;(A)+(R1)+Cy->A (A)=31HMOV @R1,A ;(A)->((R1)) (30H)=31HPUSH ACC ;累加器A的内容压栈POP DPL ;堆栈内容弹出到DPL (DPL)=31HRR A ;累加器A的内容循环右移 (A)=98HMOV R0,A ;(A)->R0 (R0)=98HORL A,#24H ;(A) or 24H->A (A)=0BCHMOV P1,A ;(A)->P1 (P1)=0BCH第5页共57页SWAP A ;累加器A的内容高低四位交换 (A)=0CBHMOV DPH,A ;(A)->DPH (DPH)=0CBHMOV B,#02H ;#02H->B (B)=02HADD A,B ;(A)+(B)->A (A)=0CDHCLR ACC.3 ;0->ACC.3 (A)=0C5HSWAP A ;累加器A的内容高低四位交换 (A)=5CHEND(A)= 5CH (R0)= 98H (DPTR)= 0CB31H (P1)= 0BCH (30H)= 31H8、 ORG 0LJMP START ;跳转到(PC)=0030H处ORG 30HSTART: MOV SP,#50H ;#50H->SP (SP)=50HMOV R3,#10H ;#10H->R3 (R3)=10HCLR A ;累加器A内容清零 (A)=00HMOV R0,#20H ;#20H->R0 (R0)=20HLOOP: MOV @R0,A ;(A)->((R0)) (20H)=00HINC R0 ;(R0)+1->R0 (20H)=01HDJNZ R3,LOOP ;(R3)-1->R3 若R3不等于零则跳转到LOOP处SETB 00H ;1->位地址00H位 (20H.0)=1 (20H)=01HSETB C ;1->Cy (Cy)=1SUBB A,#00H ;(A)-00H-Cy->A (A)=0FFHMOV DPL,A ;(A)->DPL (DPL)=0FFHPUSH ACC ;累加器A的内容压栈MOV A,R3 ;(R3)->A (A)=00HMOV DPH,A ;(A)->DPH (DPH)=00HPOP ACC ;堆栈内容弹出到A (A)=0FFHMOVX @DPTR,A ;(A)->(DPTR) (00FFH)=0FFHANL A,#55H ;(A) and 55H->A (A)=55HPUSH ACC ;累加器A的内容压栈 (SP)=51HCLR A ;累加器A内容清零 (A)=00HEND(A)= 00H (R3)= 00H (20H)= 01H (DPTR)= 00FFH (SP)= 51H第6页共57页9、 ORG 0LJMP START ;跳转到(PC)=0030H处ORG 30HSTART: MOV R0,#30H ;#30H->R0 (R0)=30HMOV R1,#20H ; #20H->R1 (R1)=20HMOV A,R0 ;(R0)->A (A)=30HADD A,#37H ;(A)+#36H->A (A)=67HMOV P1,A ;(A)->P1 (P1)=67HINC R0 ;(R0)+1->R0 (R0)=31HINC R1 ;(R1)+1->R0 (R1)=21HANL A,R1 ;(A)&(R1)->A (A)=21HSWAP A ;累加器A的高低4位交换 (A)=12HPUSH ACC ;累加器A内容压栈MOV P1,A ;(A)->P1 (P1)=12HSWAP A ;累加器A的高低4位交换 (A)=21HPOP B ;堆栈内容出栈到B寄存器 (B)=12HMOV R0,A ;(A)->R0 (R0)=21HMOV DPTR,#2200H ;#2200H->DPTR (DPTR)=2200HSETB C ;1->Cy (Cy)=1ADDC A,B ;(A)+(B)+(Cy)->A (A)=34HMOVX @DPTR,A ;(A)->(DPTR) (2200H)=34HEND(R0)= 21H (R1)= 21H (P1)= 12H (B)= 12H (2200H)= 34H10、 ORG 0LJMP START ;跳转到(PC)=0030H处ORG 30HSTART: MOV SP,#50H ;#50H->SP (SP)=50HMOV R2,#20H ;#20H->R2 (R2)=20HMOV DPTR,#3000H ;#3000H->DPTR (DPTR)=3000HCLR A ;0->A (A)=0LOOP: MOVX @DPTR,A ;(A)->(DPTR)INC DPTR ;(DPTR)+1->DPTRDJNZ R2,LOOP;(R2)-1->R2 若(R2)不等于零则转移到LOOP处INC DPH ;(DPH)+1->DPH (DPH)=31H (R2)=00H (DPL)=20H第7页共57页INC DPH ;(DPH)+1->DPH (DPH)=32HMOV 20H,#38H ;#36H->(20H) (20H)=38HSETB 01H ;位地址01H置1 20H.1=1 (20H)=3AHMOV A,20H ;(20H)->A (A)=3AHMOVX @DPTR,A ;(A)->(DPTR) (DPTR)=3220H (3220H)=3AHINC A ;(A)+1->A (A)=3BHINC A ;(A)+1->A (A)=3CHPUSH ACC ;累加器A内容压栈XCH A,R2 ;累加器A的内容与R2内容互换 (A)=00H (R2)=3CH POP DPH ;堆栈内容弹到DPH (DPH)=3CHADD A,#55H ;(A)+#55H->A (A)=55HPUSH ACC ;累加器A内容压栈,(SP)=51HEND(A)= 55H (R2)= 3CH (20H)= 3AH (DPTR)= 3C20H (SP)= 51H11、 ORG 0LJMP START ;跳转到(PC)=0030H处ORG 30HSTART: MOV R0,#20H ;#20H->R0 (R0)=20HMOV A,#31H ;#31H->A (A)=31HSETB C ;(Cy)=1ADDC A,R0 ;(A)+(R0)+Cy->A (A)=52HMOV @R0,A ;(A)->(R0) (20H)=52HSWAP A ;累加器A高低4位交换 (A)=25HDEC A ;(A)-1->A (A)=24HMOV DPTR,#2000H ;#2000H->DPTR (DPTR)=2000HINC DPH ;(DPH)+1->DPH (DPH)=21HDEC DPL ;(DPL)-1->DPL (DPL)=0FFHMOV P1,A ;(A)->P1 (P1)=24HINC A ;(A)+1->A (A)=25HMOVX @DPTR,A ;(A)->(DPTR) (21FFH)=25HXCH A,R0 ; (A) R0 (A)=20H (R0)=25HRL A ;累加器A内容循环左移 (A)=40HPUSH ACC ;累加器A的内容入栈RL A ;累加器A内容循环左移 (A)=80H第8页共57页POP ACC ;堆栈内容弹出到累加器A (A)=40HEND(A)= 40H (R0)= 25H (DPTR)= 21FFH (P1)= 24H (20H)= 52H12、 ORG 0LJMP START ;跳转到(PC)=0030H处ORG 30HSTART: MOV SP,#50H ;#50H->SP (SP)=50HMOV DPTR,#2000H ;#3000H->DPTR (DPTR)=2000HMOV 20H,#06H ;#06H->20H (20H)=06HMOV R0,#20H ;#20H->R0 (R0)=20HMOV A,#35H ;#35H->A (A)=35HMOV R2,#10H ;#10H->R2 (R2)=10HSETB 00H ;置位20H.0 (20H.0)=1 (20H)=07HSETB C ;置位Cy (Cy)=1ADDC A,@R0 ;(A)+((R0))+Cy->A (A)=3DHINC R0 ;(R0)+1->R0 (R0)=21HMOV @R0,A ;(A)->((R0)) (21H)=3DHLOOP: DJNZ R2, LOOP ;(R2)-1->R2 若R2内容不等于零则转移SWAP A ;累加器A内容的高低4位交换 (A)=0D3HPUSH ACC ;累加器A内容入栈INC DPH ;(DPH)+1->DPH (DPH)=21HMOVX @DPTR,A ;(A)->(DPTR) (2100H)=0D3HPOP B ;堆栈内容弹出到B (B)=0D3HRR A ;累加器A内容循环右移 (A)=0E9HADD A,B ;(A)+(B)->A (A)=0BCHMOV P1,A ;(A)->P1 (P1)=0BCHEND(21H)= 3DH (R2)= 00H (A)= 0BCH (B)= 0D3H (2100H)= 0D3H13、 ORG 0LJMP START ;跳转到(PC)=0030H处ORG 30HSTART: MOV DPTR,#2000H ;#2000H->DPTR (DPTR)=2000HMOV A,#36H ;#36H->A (A)=36H第9页共57页MOV R0,#30H ;#30H->R0 (R0)=30HSETB C ;1->Cy (Cy)=1MOV @R0,A ;(A)->((R0)) (30H)=36HRLC A ;累加器A的内容带进位循环左移 (A)=6DHXCH A,@R0 ;累加器A的内容与20H单元的内容互换 (A)=36H (30H)=6DH PUSH ACC ;累加器A的内容入栈POP DPL ;堆栈内容弹出到DPL (DPL)=36HMOVX @DPTR,A ;(A)->(DPTR) (2036H)=36HDEC A ;(A)-1->A (A)=35HPUSH DPH ;DPH内容压栈POP B ;堆栈内容弹出到B (B)=20HADD A,B ;(A)+(B)->A (A)=55HMOV P1,A ;(A)->P1 (P1)=55HCLR A ;累加器A内容清零ADD A,B ;(A)+(B)->A (A)=20HEND(P1)= 55H (B)= 20H (30H)= 6DH (DPTR)= 2036H (R0)= 30H14、 ORG 0LJMP START ;跳转到(PC)=0030H处ORG 30HSTART: MOV SP,#60H ;#60H->SP (SP)=60HMOV R0,#20H ;#20H->R0 (R0)=20HMOV R2,#10H ;#10H->R2 (R2)=10HMOV A,#24H ;#24H->A (A)=24HLOOP: MOV @R0,A ;(A)->((R0))INC R0 ;(R0)+1->R0DJNZ R2,LOOP ;(R2)-1->R2 若R2内容不等于0则跳转到LOOP处SETB 01H ;1->位地址为01H的位 (20H.1)=1 (20H)=26HSETB C ;1->Cy (Cy)=1ADDC A,20H ;(A)+(20H)+(Cy)->A (A)=4BHSWAP A ;累加器A内容高低四位互换 (A)=0B4HPUSH ACC ;累加器A内容压栈POP DPH ;堆栈内容弹出到DPH (DPH)=0B4HPUSH ACC ;累加器A内容压栈第10页共57页POP B ;堆栈内容弹出到B (B)=0B4HMOV A,R2 ;(R2)->A (A)=00HMOV DPL,A ;(A)->DPL (DPL)=00HADD A,B ;(A)+(B)->A (A)=0B4HPUSH ACC ;累加器A内容压栈 (SP)=61HEND(A)= 0B4H (R0)= 30H (20H)= 26H (DPTR)= 0B400H (SP)= 61H15、 ORG 0LJMP START ;跳转到(PC)=0030H处ORG 30HSTART: MOV DPTR,#1100H ;#1100H->DPTR (DPTR)=1100HCLR A ;0->A (A)=00HMOV R1,#20H ;#20H->R1 (R1)=20HSETB C ;1->Cy (Cy)=1ADDC A,R1 ;(A)+(R1)+Cy->A (A)=21HMOV @R1,A ;(A)->((R1)) (20H)=21HINC A ;(A)+1->A (A)=22HINC A ;(A)+1->A (A)=23HPUSH ACC ;累加器A的内容压栈POP DPL ;堆栈内容弹出到DPL (DPL)=23HRR A ;累加器A的内容循环右移 (A)=91HMOV R0,A ;(A)->R0 (R0)=91HORL A,#24H ;(A) or #24H->A (A)=0B5HMOV P1,A ;(A)->P1 (P1)=0B5HSWAP A ;累加器A的内容高低四位交换 (A)=5BHMOV DPH,A ;(A)->DPH (DPH)=5BHMOV B,#02H ;#02H->B (B)=02HADD A,B ;(A)+(B)->A (A)=5DHCLR ACC.4 ;0->ACC.4 (A)=4DHSWAP A ;累加器A的内容高低四位交换 (A)=0D4HEND(A)= D4H (R0)= 91H (DPTR)= 5B23H (P1)= 0B5H (20H)= 21H第11页共57页16、 ORG 0LJMP START ;跳转到(PC)=0030H处ORG 30HSTART: MOV SP,#60H ;#60H->SP (SP)=60HMOV R3,#20H ;#20H->R3 (R3)=20HMOV A,#20H ;#20H->A (A)=20HMOV R0,#20H ;#20H->R0 (R0)=20HLOOP: MOV @R0,A ;(A)->((R0))INC R0 ;(R0)+1->R0DJNZ R3,LOOP ;(R3)-1->R3 若R3不等于零则跳转到LOOP处SETB 02H ;1->位地址02H位 (20H.2)=1 (20H)=24HSETB C ;1->Cy (Cy)=1SUBB A,20H ;(A)-(20H)-Cy->A (A)=0FBHMOV DPL,A ;(A)->DPL (DPL)=0FBHPUSH ACC ;累加器A的内容压栈MOV A,R3 ;(R3)->A (A)=00HMOV DPH,A ;(A)->DPH (DPH)=00HPOP ACC ;堆栈内容弹出到A (A)=0FBHMOVX @DPTR,A ;(A)->(DPTR) (00FBH)=0FBHANL A,#55H ;(A) and 55H->A (A)=51HPUSH ACC ;累加器A的内容压栈 (SP)=61HSWAP A ;累加器A内容高低4位交换 (A)=15HEND(A)= 15H (R3)= 00H (20H)= 24H (DPTR)= 00FBH (SP)= 61H17、O RG 0MOV R2,#8 ;#8->R2 (R2)=8HMOV R0,#30H ;#30H->R0 (R0)=30HCLR A ; #0->A (A)=0CPL A ; 累加器A的内容取反,(A)=0FFHLOOP: MOV @R0,A ; (A)-> (R0) (30H)~(37H)=0FFHINC R0 ; (R0)+1->R0DJNZ R2,LOOP ; (R2)-1 -> R2 , (R2)≠0则转移到LOOP处MOV B,R2 ; (R2) ->B (B)=(R2)=0INC B ; (B)+1 ->B (B)=1第12页共57页M OV A,R0 ; (R0) ->A (A)=(R0)=38HC LR C ; 0 -> Cy Cy=0ADDC A,B ; (A)+(B)+Cy -> A (A)=39HMOV R0,A ; (A) ->R0 (R0)=(A)=39HR LC A ; 累加器A的内容带进位左移,(A)=72HMOV DPTR,#1234H ; #1234H ->DPTR (DPTR)=1234HM OVX @DPTR,A ; (A) ->(DPTR) (1234H)=72HSWAP A ;累加器A的内容高低4位交换,(A)=27HPUSH ACC ; 累加器内容入栈POP DPH ; 堆栈内容弹出到DPH (DPH)=27HE ND(R0)= 39H (A)= 27H(33H)= 0FFH (DPTR)= 2734H (1234H)= 72H评分办法:指令注释占5分,对于程序段注释部分写对的学生可酌情给1-4分;程序段执行结果每空1分,共5分。

单片机编程题

单片机编程题

1.阅读下列程序,并要求:1)说明程序的功能;2)写出涉及的寄存器及片内RAM单元(如图所示)的最后结果。

MOV R0,#40HMOV A,@R0INC R0ADD A,@R0INC R0MOV @R0,ACLR AADDC A,#00HINC R0MOV @R0,ASJMP $功能:结果:22、利用定时器T0产生定时脉冲。

每隔2ms产生宽度为2个机器周期的正脉冲,由P1.0输出此定时序列脉冲信号(设时钟频率为6MHZ)。

解:首先求出定时器T0初值。

由于时钟频率为6MHZ,所以,机器周期为2µs。

因为:t=(213-T0初值)⨯机器周期所以,当t=2ms时,则:(213-T0初值)⨯ 2⨯10-6=2⨯10-3解得:T0初值=7096=11011101 11000B,其中将高8位11011101 B=DDH赋给TH0,低5位11000B=18H赋给TL0。

方法一:采用查询工作方式,编程如下:ORG 0000HAJMP MAINORG 0100HMAIN: CLR P1.0MOV TMOD , #00H ;设定T0的工作方式MOV TH0 , #0DDH ;给定时器T0送初值MOV TL0 , #18HSETB TR0 ;启动T0工作LOOP: JNB TF0 , $ ;$为当前指令指针地址CLR TF0SETB P1.0 ;产生2µs正脉冲CLR P1.0MOV TH0 , #0DDH ;重装载TH0和TL0MOV TL0 , #18HSJMP LOOPEND方法二:采用中断工作方式,编程如下:ORG 0000HAJMP MAINORG 000BHAJMP T0INTORG 0100HMAIN: CLR P1.0MOV TH0 , #0DDH ;给定时器T0送初值MOV TL0 , #18HMOV IE , #82H ;允许T0中断SETB TR0 ;启动T0SJMP $中断服务程序:ORG 0300HT0INT: SETB P1.0CLR P1.0MOV TH0 , #0DDH ;重装载TH0和TL0MOV TL0 , #18HRETI23、单片机包含哪些主要的逻辑部件?一个8位CUP,片内RAM,片内ROM,四个P口,两个定时/计数器,5个中断源的中断系统,UART,片内振荡器。

stc单片机eeprom读写程序

stc单片机eeprom读写程序

stc单片机eeprom读写程序以下是STC单片机使用EEPROM进行读写的示例程序:#include <reg52.h>#include <intrins.h>#define EEPROM_ADDR 0xA0 // EEPROM的I2C地址sbit SDA = P2^0; // I2C的数据线sbit SCL = P2^1; // I2C的时钟线// I2C开始信号void I2C_Start(){SDA = 1;_nop_(); // 延时一段时间SCL = 1;_nop_(); // 延时一段时间SDA = 0;_nop_(); // 延时一段时间SCL = 0;_nop_(); // 延时一段时间}// I2C停止信号void I2C_Stop(){SDA = 0;_nop_(); // 延时一段时间SCL = 1;_nop_(); // 延时一段时间SDA = 1;_nop_(); // 延时一段时间}// I2C发送一个字节的数据void I2C_SendByte(unsigned char dat){unsigned char i;for (i = 0; i < 8; i++){SDA = dat & 0x80; // 获取最高位dat <<= 1;_nop_(); // 延时一段时间SCL = 1;_nop_(); // 延时一段时间SCL = 0;_nop_(); // 延时一段时间}SDA = 1;_nop_(); // 延时一段时间SCL = 1;_nop_(); // 延时一段时间SCL = 0;_nop_(); // 延时一段时间}// I2C接收一个字节的数据unsigned char I2C_ReceiveByte(){unsigned char i, dat = 0;SDA = 1;for (i = 0; i < 8; i++){_nop_(); // 延时一段时间SCL = 1;_nop_(); // 延时一段时间dat <<= 1;dat |= SDA;SCL = 0;}return dat;}// 在EEPROM中写入一个字节的数据void EEPROM_WriteByte(unsigned char addr, unsigned char dat) {I2C_Start();I2C_SendByte(EEPROM_ADDR | 0); // 发送写入指令I2C_SendByte(addr); // 发送地址I2C_SendByte(dat); // 发送数据I2C_Stop();}// 从EEPROM中读取一个字节的数据unsigned char EEPROM_ReadByte(unsigned char addr){unsigned char dat;I2C_Start();I2C_SendByte(EEPROM_ADDR | 0); // 发送写入指令 I2C_SendByte(addr); // 发送地址I2C_Start();I2C_SendByte(EEPROM_ADDR | 1); // 发送读取指令 dat = I2C_ReceiveByte(); // 读取数据I2C_Stop();return dat;}。

单片机读取程序的方法

单片机读取程序的方法

单片机读取程序的方法嘿,朋友们!今天咱就来唠唠单片机读取程序的那些事儿。

单片机这玩意儿啊,就像是一个聪明的小脑袋瓜,它要读取程序才能发挥大作用呢!想象一下,这单片机就好比是一个空荡荡的舞台,程序呢,就是那精彩绝伦的表演。

没有表演的舞台多无趣呀,所以得让程序在单片机这个舞台上闪亮登场。

那怎么让程序进入单片机呢?首先,咱得有合适的工具。

就像你要给汽车加油得有个油管一样,读取程序也得有专门的设备。

这些设备就像是打开单片机智慧大门的钥匙。

然后呢,你得找到程序的源头。

就跟找水源似的,得知道它在哪儿。

这程序可能存在于电脑里,或者是其他的存储设备中。

找到它,就像是找到了宝藏的线索。

接下来,把程序通过那些神奇的工具,一点点地传送到单片机里。

这过程就好像是在搭建一座桥,让程序从这边走到单片机那边。

在这个过程中,可不能马虎大意哦!就好比你走路得看清楚路,不然摔个跟头可不好玩。

要仔细检查每个步骤,确保程序能顺顺利利地进入单片机。

你说这单片机读取程序是不是很有意思?就像是一场小小的冒险。

有时候可能会遇到一些小麻烦,比如连接不顺畅啦,程序不兼容啦,但别着急,办法总比困难多嘛!而且啊,不同类型的单片机读取程序的方法还不太一样呢!就像不同的人有不同的性格和喜好一样。

有的可能简单直接,有的可能稍微复杂一点,但只要你有耐心,都能搞定。

你想想看,如果单片机不能读取程序,那它不就成了个摆设啦?就像一部没有电的手机,啥也干不了。

所以说呀,学会这个方法可太重要啦!咱再打个比方,单片机读取程序就像是给它注入了灵魂。

有了灵魂的单片机才能活力满满地工作呀!它可以控制各种设备,让它们按照我们的意愿来运行。

总之呢,单片机读取程序虽然听起来有点复杂,但只要你用心去学,去尝试,肯定能掌握的。

别害怕犯错,每一次的尝试都是成长的机会呀!加油吧,朋友们,让我们一起在单片机的世界里畅游,让它为我们创造更多的精彩!怎么样,是不是觉得很有趣呢?快去试试吧!。

单片机C51语言及程序设计

单片机C51语言及程序设计
1)将SFR的绝对位地址定义为位变量名



C51编译器在头文件“REG51.H”中定义了全部sfr/sfr16和sbit变量。 用一条预处理命令#include <REG51.H>把这个头文件包含到C51程序中,无需重新定义即可直接使用它们的名称。
应用举例:
片内数据存储器,片外数据存储器和程序存储器。
通常下划线开头的标识符是编译系统专用的,因此在编写C语言源程序时一般不使用以下划线开头的标识符,而将下划线用作分段符。C51编译器规定标识符最长可达255个字符,但只有前32个字符在编译时有效,因此标识符的长度一般不要超过32个字符。
关键字是一种已被系统使用过的具有特定含义的标识符。用户不得再用关键字给变量等命名。C语言关键字较少,ANSI C标准一共规定了32个关键字,见表
变量名具有字母大小写的敏感性,如SUM和sum代表不同的变量。
【存储类别】 数据类型 【存储器类型】 变量名
变量名不得使用标准C语言和C51语言的关键字。
unsigned char data system_status = 0;
//定义system_status为无符号字符型自动变量,该变量位于data区中且初值为0。
sfr或sfr16型 51MCU中有21个SFR,如何定义与这些单元相关的变量?
例如,sfr P0 = 0x80; //定义P0口地址80H sfr PCON = 0x87; //定义PCON地址87H sfr16 DPTR=0x82; //定义DPTR的低端地址82H
单精度浮点数
for
程序语句
构成for循环结构
goto
程序语句
构成goto转移结构
if
程序语句
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

写出单片机C语言程序中语句“TMOD=0x19;”的功能。

设置T1以模式2定时,设置T0以模式1定时、外部门控制运行。

阅读下面C语言函数,对各句做注释,并指出函数的功能。

unsigned char xdata array[50];
void move_xdata()
{ unsigned char i;
unsigned char code *pp;
pp=0x200;
for(i=0;i<50;i++)
array[i]=*(pp+i);
} }
函数功能:把程序存储器地址从0x200开始的50个字节数据,传送到片外RAM的数组array 中。

写出单片机C语言程序中语句“TMOD=0x21;”的功能。

设置T1以模式2定时,设置T0以模式1定时。

阅读下面C语言函数,对各句做注释,并指出函数的功能。

unsigned char data array[20];
void move_data()
{ unsigned char i;
unsigned char code *pp;
pp=0x30;
for(i=0;i<20;i++)
array[i]=*(pp+i);
} }
函数功能:把程序存储器地址从0x30开始的20个字节数据,传送到片内RAM的数组array 中。

写出单片机C语言程序中语句“TMOD=0xa2;”的功能。

设置T1以模式2定时、外部门控制运行,设置T0以模式2定时。

下面程序段的功能是把片外RAM数据区域中,地址从0x0100开始的32个字节数据,传送到片内RAM地址从0x36开始的区域中。

阅读该程序段,找出错误的地方,在其下面画线,并且把正确语句写在右边。

unsigned char data *p1, i=32; (1)
unsigned char code *p2; (2)
p1=0x36; *p2=0x0100; (3)
while(i - ) (4)
(2)unsigned char xdata *p2
(3) p2=0x0100;
(4) while(i --)
(5) *(p1++)=*(p2++);
写出单片机C语言程序中语句“TMOD=0x26;”的功能。

设置T1以模式2定时,设置T0以模式2计数。

写出单片机C语言程序中语句“TMOD=0xa5;”的功能。

设置T1以模式2定时、外部门控制运行,设置T0以模式1计数。

阅读下面C语言函数,对各句做注释,并指出函数的功能。

unsigned char to_asc(char d)
{ d-=0x30;
If(d>9)
d-=7;
return d;
}
函数功能:将ASCII码转换成十六进制数。

写出单片机C语言程序中语句“TMOD=0x5d;”的功能。

设置T1以模式1计数,设置T0以模式1计数、外部门控制运行。

写出单片机C语言程序中语句“TMOD=0x2f;”的功能。

设置T1以模式2定时,设置T0以模式3计数、外部门控制运行。

阅读下面C语言函数,对各句做注释,并指出函数的功能。

void move_idata()
{ unsigned char i;
unsigned char idata *pi;
unsigned char xdata *px;
pi=0x80; px=0;
for(i=0;i<30;i++)
*(pi+i]=*(px+i);
} }
函数功能:把片外数据存储器地址从0x0000开始的30个字节数据,传送到片内RAM地址从0x80开始的区域。

写出单片机C语言程序中语句“TMOD=0x1e;”的功能。

设置T1以模式2定时,设置T0以模式2计数、外部门控制运行。

阅读下面C语言函数,对各句做注释,并指出函数的功能。

unsigned char to_asc(char d)
{ d+=0x30;
If(d>0x39)
d+=7;
return d;
}
函数功能:将十六进制数转换成ASCII码。

写出单片机C语言程序中语句“TMOD=0x12;”的功能。

设置T1以模式1定时,设置T0以模式2定时。

写出单片机C语言程序中语句“TMOD=0x67;”的功能。

设置T1以模式2计数,设置T0以模式3计数。

写出单片机C语言程序中语句“TMOD=0xa1;”的功能。

设置T1以模式2定时、外部门控制运行,设置T0以模式1定时。

写出单片机C语言程序中语句“TMOD=0x61;”的功能。

设置T1以模式2计数,设置T0以模式1定时。

写出单片机C语言程序中语句“TMOD=0x95;”的功能。

设置T1以模式1定时、外部门控制运行,设置T0以模式1计数。

写出单片机C语言程序中语句“TMOD=0x51;”的功能。

设置T1以模式1计数,设置T0以模式1定时。

写出单片机C语言程序中语句“TMOD=0xa6;”的功能。

设置T1以模式2定时、外部门控制运行,设置T0以模式2计数。

写出单片机C语言程序中语句“TMOD=0xd1;”的功能。

设置T1以模式1计数、外部门控制运行,设置T0以模式1定时。

相关文档
最新文档