单片机程序阅读

合集下载

单片机程序

单片机程序
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
程序语句

第3章51系列单片机程序设计(C语言部分)

第3章51系列单片机程序设计(C语言部分)

idata
间接寻址片内数据存储区,可访问片内全部RAM地址空间(256字节)
pdata
分页寻址片外数据存储区(256字节)由MOV @Ri访问(i=0,1)
xdata
片外数据存储区(64 KB)由MOVX @DPTR访问
code
程序存储器64 KB空间,由MOVC @DPTR访问
第3章 51系列单片机程序设计(C部分)
/* Ary37定义为abry[3]的第7位 */
第3章 51系列单片机程序设计(C部分)
3.5 数 组
数组:数组是一组类型相同 有序数据的集合。用数组名 和下标来唯一确定数组中的 元素。
第3章 51系列单片机程序设计(C部分)
3.5.1 一维数组
一、一维数组的定义 形式:类型说明符 数组名 [常量表达式]
使用C51进行编程时,MCS-51片内的I/O口与片外扩展的I/O可以统一在一个头文 件中定义,也可以在程序中(一般在开始的位置)进行定义。
对于MCS-51片内I/O口按特殊功能寄存器方法定义。 例如:
sfr P0=0x80 ; /* 定义P0口,地址为80H */ sfr P1=0x90 ; /* 定义P1口,地址为90H */
第3章 51系列单片机程序设计(C部分)
3.4.3 C51数据的存储类型与MCS-51存储结构
表 3.4.2 C51存储类型与MCS-51存储空间的对应关系
存储类型 与存储空间的对应关系
data
直接寻址片内数据存储区,访问速度快(128字节)
bdata
可位寻址片内数据存储区,允许位与字节混合访问(16字节)
据 浮点型(float) 类
型 指针类型
详细见表3.4.1

单片机程序

单片机程序

1.用C51实现片内RAM的30H和31H地址单元中的数据相加,保存到32H单元中。

#include <absacc.h>#define a DBYTE[0x30]#define b DBYTE[0x31]#define c DBYTE[0x32]void main( ){c=a+b;}2.用C51语言实现给片内RAM的30H地址单元赋值为CDH(内存赋值)。

#include <absacc.h>#define a DBYTE[0x30]void main( ){a=0xCD;}3.编写程序,将单片机片外2000H为首地址的连续10个单元的内容,读入到片内RAM的40H~49H单元中。

#include <absacc.h>.void main( ){unsigned char i;for(i=0;1<10;i++){XBYTE[0x2000+i]=i;DBYTE[0x40+i]=XBYTE[0x2000+i];}}4.有符号数比较大小假设在片内RAM的30H单元中,储存的有符号数据是m,在片内RAM的30H 中存储的有符号数是n,比较这两个数的大小,并将较大的数保存在片内RAM的30H单元中,较小的数保存在片内RAM的31H单元中。

#incliude <absacc.h>#define m DBYTE[0x30]#define n DBYTE[0x31]#define a DBYTE[0x32]void main( ){m=-6;n=-5;if(m<n){a=m;m=n;n=a;}5.比较大小将片内RAM的30H~39H单元中的数据分别赋值成0~9,然后对其进行比较,将最大值存入片内3AH的单元中。

#include <absacc.h>void main( ){unsigned char i;for(i=0;i<10;i++)DBYTE[0x30+i]=i;DBYTE[0x3a]= DBYTE[0x30];for(i=0;i<10;i++)if(DBYTE[0x3a]<DBYTE[0x30+i])DBYTE[0x3a]=DBYTE[0x30+i];}6.ASCII码16进制数若一个十六进制数的ASCII码,存于片内RAM的30H单元,请把该ASCII码对应十六进制数,存于片内RAM的31H单元中。

单片机程序分析(绝对经典)

单片机程序分析(绝对经典)

一、读程序题(每小题4分,共20分)1.执行下列程序段后,(P1)=_______。

MOV P1,#5DHCPL P1.1CPL P1.2CLR P1.6SETB P1.72.执行下列程序段后,(A)=_______,(CY)=____。

MOV A,#C5HRL A3.下列程序段执行后,(R0)=_______,(7EH)=____,(7FH)=_______。

MOV R0,#7EHMOV 7EH,#0FFHMOV 7FH,#40H1NC @R01NC R01NC @R04.已知(SP)=60H,子程序SUBTRN的首地址为0345H,现执行位于0123H的ACALL SUBTRN双字节指令后,(PC)=___,(61H)=_______,(62H)= ____。

5.阅读下列程序,说明其功能。

MOV R0,#dataMOV A,@R0RL AMOV R1,ARL ARL AADD A,R1MOV @R0,ARET读程序题(每小题4分,共20分)1.(P1)=9BH2.(A)=8BH(或10001011B)(CY)=不影响3.(R0)=7FH(7EH)=00H(7FH)=41H4.(PC)=0345H(61H)=25H(62H)=01H5.(data)×10操作二、使用简单指令序列完成以下操作(12分)1.请将片外RAM20H—25H单元清零2.请将ROM3000H单元内容送R7使用简单指令序列完成以下操作(12分,每小题6分)1.MOV R0,#20HCLR ALOOP:MOVX @R0,AINC R0DJNZ R7,LOOP2.MOV DPTR,#3000HCLR AMOVC A,@A+DPTRMOV R7,A三、使用简单指令序列完成以下操作(12分)1、将20H单元清零MOV 20H,#00H 或CLR AMOV 20H, A2、将片外RAM2000H中的低字节与片内20H中的低字节交换。

单片机程序

单片机程序

1、编程将片内 RAM30H 单元开始的15 B 的数据传递到片外 RAM3000H 开始的单元中去。

解: STRAT: MOV R0,#30HMOV R7,#0FHMOV DPTR,#3000HLOOP: MOV A,@R0MOVX@DPTR,AINC R0INC DPTRDJNZ R7,LOOP3、将内部 RAM 40H 开始的 10 个字节的数搬到外面RAM 2000H 处MOV DPTR,#2000HMOV R0,#40HMOV R2,#0AHLOOP:MOV A,@R0MOVX @DPTR,AINC R0INC DPTRDJNZ R2,LOOPSJMP$ENDRET2 、编程将片内 RAM 40H 单元中的内容送到片外RAM2000H 单元中。

解:ORG0100HMOV A, 40HMOV DPTR, #2000HMOVX @DPTR, AEND4、将存于外面 RAM 8000H 开始的 50H 数据传递 0010H 的地区,请编程实现。

MOV DPTR, #8000HMOV R0,#10HMOV R2,#50HLOOP: MOVX A, @DPTR;取数MOVX @R0,A;存数1NC DPTR1NC R0DJNZ R2, LOOPRET5.片内 RAM40H 开始的单元内有10B 二进制数,编程找出此中最大值并存于50H 单元中.解START: MOV R0,#40H;数据块首地点送 R0MOV R7,#09H;比较次数送R7MOV A,@R0;取数送ALOOP:INC R0MOV30H,@R0;取数送30 HCJNE A,30H,NEHT;( A)与( 30H)对比NEXT:JNC BIE1(A)≥ (30H)转 BIR1MOV A,30H;(A)< (30H),大数送 ABIE1:DJNZ R7,LOOP;比较次数减 1,不为 0,持续比较MOV50H,A;比较结束,大数送 50HRET6.片内 RAM30H 开始的单元中有 10B 的二进制数,请编程求它们之和(和<256 ).解ADDIO:MOV R0,30H ADD A,@R0MOV R7,#9DJNZ R7,LOOPMOV A,@R0MOV30H,A LOOP: INC R0RET7、设从内存BLOCK单元开始寄存一无符号数的数据块,其长度为LEN。

51单片机(四位数码管的显示)程序[1]

51单片机(四位数码管的显示)程序[1]

51单片机(四位数码管的显示)程序基于单片机V1或V2实验系统,编写一个程序,实现以下功能:1)首先在数码管 上显示P ”个字符;2)等待按键,如按了任何一个键,则将这 4个字符清除, 改为显示0000”个字符(为数字的0)。

E3最佳答案下面这个程序是4x4距阵键盘丄ED 数码管显示,一共可以到0-F 显示,你可以稍微 改一下就可以实现你的功能了,如还有问题请发信息,希望能帮上你!#i nclude<at89x52.h> un sig ned char codeDig[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1 ,0x86,0x8e}; //gongyang 数码管 0-F 代码void key_delay(void) {int t;for(t=0;t<500;t++);}un sig nedchar k;//设置全局变量k 为键盘的键值键盘延时函数键盘扫描函数 ***************************** *///延时函数voidkeyscan(void)//键盘初始化 //有键按下? //延时 //确认真的有键按下? //使行线 P2.4 为低电平,其余行为高电平 //a 作为缓存 //开始执行行列扫描 {case 0xee:k=15;break;case 0xde:k=11;break;case 0xbe:k=7;break;case 0x7e:k=3;break;default:P2 = 0xfd;//使行线 P2.5 为低电平,其余行为高电平a = P2;switch (a)//键盘扫描函数 {unsigned char a;P2 = 0xf0;if(P2!=0xf0){key_delay();if(P2!=0xf0){P2 = 0xfe;key_delay();a = P2;switch (a)case 0xed:k=14;break;case 0xdd:k=10;break;case 0xbd:k=6;break;case 0x7d:k=2;break;default:P2 = 0xfb; //使行线 P2.6 为低电平,其余行为高电平a = P2;switch (a){case 0xeb:k=13;break;case 0xdb:k=9;break;case 0xbb:k=5;break;case 0x7b:k=1;break;default:P2 = 0xf7; //使行线P2.7为低电平,其余行为高电平a = P2;switch (a){case 0xe7:k=12;break;case 0xd7:k=8;break;case 0xb7:k=4;break;case 0x77:k=0;break;default:break;}} break;}}}}void main(void){while(1){keyscan(); switch(k){case 0:P0=Dig[0];break;case 1:P0=Dig[1];break;case 2:P0=Dig[2];break;case 3:P0=Dig[3];break;case 4:P0=Dig[4];break;case 5:P0=Dig[5];break;**************************** ***主函数 * ********************************** //调用键盘扫描函数 //查找按键对应的数码管显示代码case 6:P0=Dig[6];break;case 7:P0=Dig[7];break;case 8:P0=Dig[8];break;case 9:P0=Dig[9];break;case10:P0=Dig[10];break;case11:P0=Dig[11];break;case12:P0=Dig[12];break;case13:P0=Dig[13];break;case14:P0=Dig[14];break;case15:P0=Dig[15];break;default:break; // 退出}}}endWelcome ToDownload !! !欢迎您的下载,资料仅供参考!。

单片机读取脉冲流量计程序

单片机读取脉冲流量计程序

单片机读取脉冲流量计程序1.引言1.1 概述概述部分的内容可以包括以下内容:在工业自动化领域中,脉冲流量计被广泛应用于测量流体的流量。

脉冲流量计通过感知流体流过管道的脉冲信号来计算流量值,具有精度高、反应快和可靠性强等优点。

为了实现对脉冲流量计的读取和监控,可以通过使用单片机来设计和实现相应的程序。

本文以单片机读取脉冲流量计为主题,主要介绍了脉冲流量计的原理以及通过单片机实现对脉冲流量计读取的程序设计。

首先,在第二部分中,我们将详细介绍脉冲流量计的工作原理,包括信号发生器的构造和工作原理,以及脉冲信号的计数和流量值计算方法。

其次,在第三部分中,我们将介绍通过单片机实现对脉冲流量计的读取的程序设计方法,包括硬件电路设计和软件编程。

最后,在结论部分中,我们将总结本文的主要内容,并对程序设计的实现结果进行讨论。

通过本文的阅读,读者可以了解脉冲流量计的原理及其在自动化领域中的应用,以及通过单片机实现对脉冲流量计读取的程序设计方法。

这对于进一步提高流量计的性能和可靠性,以及在实际应用中更好地满足工业生产的需求具有重要的参考价值。

所以,希望通过本文的阅读能够对读者有所帮助。

1.2 文章结构文章结构部分主要介绍了该篇长文的整体结构和各个章节的内容安排。

具体内容如下:本文分为引言、正文和结论三个部分。

引言部分包括概述、文章结构和目的三个小节。

在概述中,将介绍脉冲流量计的背景和作用。

文章结构部分即本段落,将说明文章的整体结构和各个章节的内容。

目的部分将明确本文的研究目标和意义。

正文部分将包括脉冲流量计简介和单片机读取脉冲流量计的原理两个小节。

脉冲流量计简介将介绍脉冲流量计的基本原理、工作原理和应用领域。

单片机读取脉冲流量计的原理将详细阐述如何使用单片机来获取脉冲流量计的数据,介绍读取流程和相关技术。

结论部分将包括实现脉冲流量计读取的程序设计和结果与讨论两个小节。

实现脉冲流量计读取的程序设计将介绍如何编写程序来实现读取脉冲流量计数据的功能,并讨论设计方案和具体实现过程。

单片机主程序流程

单片机主程序流程

单片机主程序流程1.初始化部分:单片机在执行主程序之前需要进行一些初始化操作,包括配置端口和寄存器的初始状态,设置中断和定时器,初始化外设等。

首先需要确定单片机的时钟源和时钟频率,并根据需要配置相应的时钟模块。

然后需要配置定时器和中断源,使得单片机能够在指定的时间间隔内执行特定的代码。

接下来需要初始化各个外设模块,包括ADC模块、串口模块、PWM模块等。

通过设置相应的寄存器标志位,使得外设能够正常工作。

这些初始化过程需要根据具体的单片机型号和外设模块进行操作。

2.循环部分:初始化完成后,单片机进入主循环部分。

主循环是单片机最重要的部分,其中包含了系统的核心功能和业务逻辑。

首先读取输入设备,例如检测按键的按下情况、读取传感器的数据等。

通过读取输入设备,可以获取外部环境的信息,并根据这些信息进行判断和处理。

然后进行数据处理和控制操作。

根据读取到的输入数据,进行算法运算、数据转换和逻辑判断等操作。

然后根据处理结果控制其他设备的状态,例如控制LED灯的亮灭、电机的运转等。

在循环过程中,可能还需要进行一些通信操作,例如与其他设备进行数据交换或通信。

需要根据具体的通信协议和通信方式进行配置和操作。

3.中断处理部分:除了主循环部分,单片机还需要处理各种中断事件,以及相应的中断服务程序。

这些中断事件通常是由外部的触发信号引起的。

例如,外部中断信号、定时器中断、串口接收中断等。

当发生中断事件时,单片机会在合适的时机中断主循环的执行,转而执行中断服务程序。

中断服务程序是一段特殊的代码,用来处理中断事件并响应。

执行完中断服务程序后,单片机会恢复到原来的位置继续执行主循环。

在中断服务程序中,通常需要保存现场、处理中断事件、清除中断标志位、恢复现场等。

需要根据中断源和中断向量表进行配置和编写相应的中断服务程序。

4.总结部分:在单片机主程序的末尾,通常需要进行总结和清理工作。

总结部分可以对程序的运行结果进行统计和分析,例如输出统计信息、保存运行数据等。

51单片机全部程序

51单片机全部程序

数码管/****************************************************************************/ #include<reg52.h>#define uint unsigned int#define uchar unsigned charuchar code temp[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,},a[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,};void delay(uint z){uint i;for (z;z>0;z--)for(i=10;i>0;i--);}void main(){while(1){ uint i;// P1=0x00;for(i=0;i<6;i++){P1=a[i];P0=temp[i];delay(5);}}}/****************************************************************************/I/O口8255/****************************************************************************/ #include<reg51.h>#include<absacc.h>#define uchar unsigned char#define uint unsigned int#define PA XBYTE[0XFF7C]#define PB XBYTE[0XFF7d]#define PC XBYTE[0XFF7e]#define CTR XBYTE[0XFF7F]uchar code temp[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,},a[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf};void delay(uint z){uint i;for(z;z>0;z--)for(i=10;i>0;i--);}void main(){CTR=0x80;while(1){uint i;for(i=0;i<6;i++){PA=a[i];PB=temp[i];delay(5);}}}void d(){int a,b;for(a=100;a>0;a--)for(b=100;b>0;b--);}/****************************************************************************/独立键盘/****************************************************************************/ #include<reg52.h>#define uint unsigned int#define uchar unsigned char//uchar code temp[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39, //0x5e,0x79,0x71,0x00};void delay(uint z){uint i;for (z;z>0;z--)for(i=10;i>0;i--);}void main(){uint k=0,key;P1=0x00;P2=0xf0;while(1){if((P2&0xf0)!=0xf0){delay(6);if((P2&0xf0)!=0xf0)key=P2&0xf0;switch(key){ delay(10);case 0x70: P0=0X3f; break;case 0xb0: P0=0X06; break;case 0xd0: P0=0X5b; break;case 0xe0: P0=0X4f; break;default:;}}}}/****************************************************************************/计数器60s/****************************************************************************/ #include<reg52.h>#define uint unsigned int#define uchar unsigned charuint time=0;uint s,m,h,g,sh,b,q,w,sw;uchar code num[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,};void delay(uint z){uint i;for (z;z>0;z--)for(i=10;i>0;i--);}void main(){TMOD=0X10;EA=1;ET1=1;TH1=(65536-46038)/256;TL1=(65536-46038)%256;TR1=1;while(1){g=s%10;sh=s/10;b=m%10;q=m/10;w=h%10;sw=h/10;P1=0xfe;P0=num[sw];delay(10);P1=0xfd;P0=num[w];delay(10);P1=0xfb;P0=num[q];delay(10);P1=0xf7;P0=num[b];delay(10);P1=0xef;P0=num[sh];delay(10);P1=0xdf;P0=num[g];delay(10);}}void time_1(void) interrupt 3{time++;if(time==20){time=0;s++;if(s==60){s=0;m++;}if(m==60){m=0;h++;}if(h==24)h=0;}TH1=(65536-46038)/256;TL1=(65536-46038)%256;}/****************************************************************************/中断/****************************************************************************/ #include<reg52.h>#define uint unsigned int#define uchar unsigned charuchar code temp[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};uint c0=0,c1=0;void delay(uint z){uint i;for (z;z>0;z--)for(i=10;i>0;i--);}void p(){P1=0xfe; P0=temp[c0%10]; delay(10);P1=0xfd; P0=temp[(c0%100)/10]; delay(10);P1=0xfb; P0=temp[c0/100]; delay(10);P1=0xf7; P0=temp[c1/10]; delay(10);P1=0xef; P0=temp[(c1%100)/10]; delay(10);P1=0xdf; P0=temp[c1/100]; delay(10);}void main(){EA=1;IT0=1;EX0=1;IT1=1;EX1=1;while(1)p();}void int_0() interrupt 0{c0++;if(c0==999)c0=0;}void int_2() interrupt 2{c1++;if(c1==999)c1=0;}/****************************************************************************/。

STC单片机EEPROM的读写程序

STC单片机EEPROM的读写程序

STC单片机EEPROM的读写程序汇编语言写的,依据stc 单片机官方提供的资料,测试ok,另外还有c 语言的大家可到论坛去找。

stc 的eeprom 功能还是不错的,可以简化我们的外围电路,但是缺点是是有就那就是写入速度太慢了,只能按扇区的写,不能字节写.下面是代码AUXR1 EQU 0A2HISPDATA EQU 0E2HISPADDRH EQU 0E3H ISPADDRL EQU 0E4HISPCMD EQU 0E5HISPTRIG EQU 0E6HISPCONTR EQU 0E7HORG 0000HAJMP MAINORG 0030HMAIN:MOV AUXR1,#0INC AUXR1MOV DPTR,#2000HACALL ERASEMOV A,#0FEHACALL EEPROMWACALL EEPROMRINC AUXR1AJMP MAINERASE:;擦除MOV ISPCONTR,#81HMOV ISPCMD,#03HMOV ISPADDRH,DPHMOV ISPADDRL,DPLCLR EAMOV ISPTRIG,#46HMOV ISPTRIG,#0B9HNOPSETB EAACALL ISPXXRETEEPROMW:;写MOV ISPCONTR,#81HMOV ISPCMD,#02HMOV ISPADDRH,DPHMOV ISPADDRL,DPLMOV ISPDATA,ACLR EAMOV ISPTRIG,#46HMOV ISPTRIG,#0B9HNOP SETB EAACALL ISPXXRETEEPROMR:;读MOV ISPCONTR,#81HMOV ISPCMD,#01HMOV ISPADDRH,DPHMOV ISPADDRL,DPLCLR EAMOV ISPTRIG,#46HMOV ISPTRIG,#0B9HNOPMOV A,ISPDATASETB EAACALL ISPXXRET ISPXX:MOV ISPCONTR,#0MOV ISPCMD,#0MOV ISPTRIG,#0RETDEL:MOV R2,#0FFHD1:MOV R1,#0FFHDJNZ R1,$DJNZ R2,D1RETENDtips:感谢大家的阅读,本文由我司收集整编。

(完整word版)STC单片机EEPROM读写程序

(完整word版)STC单片机EEPROM读写程序
ISP_CMD= ISP_CMD | EraseCommand;/*擦除命令3*/
ISPgoon();/*触发执行*/
ISP_IAP_disable();/*关闭ISP,IAP功能*/
}
/* ====================字节写======================== */
void byte_write(uint byte_addr, uchar original_data){
void ISP_IAP_enable(void){
EA=0;/*关中断*/
ISP_CONTR =ISP_CONTR & 0x18; /* 0001,1000*/
ISP_CONTR =ISP_CONTR | WaitTime;/*写入硬件延时*/
ISP_CONTR =ISP_CONTR | 0x80; /* ISPEN=1*/
ISPgoon();/*触发执行*/
ISP_IAP_disable();/*关闭ISP,IAP功能*/
return (ISP_DATA);/*返回读到的数据*/
}
/* ==================扇区擦除======================== */
void SectorErase(uint sector_addr){
0x0e,
0x0f,
};
uinttimerForDelay,/*专供延时用的变量*/
i,/*循环变量*/
EepromPtr;/* eeprom读写指针*/
/* ---------------命令定义--------------- */
#define RdCommand0x01/*字节读*/
#define PrgCommand0x02/*字节写*/

单片机第二章2

单片机第二章2
常用的主程序结构如下:
ORG 0000H LJMP MAIN ORG 中断入口地址 LJMP INT
⋮ ORG XXXXH MAIN:主 程 序 INT:中断服务程序
25
三、中断服务程序的流程
26
例 根据中断服务程序流程,编出中断服务程序。假 设,现场保护只需将PSW和A的内容压入堆栈中保护。
典型的中断服务程序如下:
14
15
例 设置IP寄存器的初始值,使2个外中断请求为 高优先级,其它中断请求为低优先级。
(1)用位操作指令 SETB PX0 ;2个外中断为高优先级 SETB PX1 CLR PS ;串口为低优先级中断
CLR PT0 ;2个定时器/计数器低优先级中断 CLR PT1
(2)用字节操作指令 MOV IP,#05H 或: MOV 0B8H,#05H ;B8H为IP寄存器的字节地 址
单片机
SETB EA ;开总允许开关 SETB EX0 ;开INT0中断
INT0
SETB IT0 ;负跳变触发中断 Here: SJMP Here ;相当于执行其它
P1.0
1
任务
ORG 0200H ;中断服务程序
PINT0:CPL P1.0 ;改变LED
32
RETI
;返回主程序
2. 电平触发:避免一次按键引起多次中断响应。 1.软件等待按键释放。 2.硬件清除中断信号。
16
17
中断的响应时间
单级中断中最短的响应时间为3个机器周期: (1)中断请求标志位查询占1个机器周期。
(2)子程序调用指令LCALL转到相应的中断服务程序 入口,需2个机器周期。
外部中断响应的最长的响应时间为8个机器周期: (1)发生在CPU进行中断标志查询时,刚好是开始执
  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定时。

相关文档
最新文档