
每个灯亮1秒,每个灯闪亮频率为5次/秒。
下列程序,在PROTEUS中仿真通过
;-------------------------------------
ORG 0000H
LJMP MAIN
ORG 000BH
LJMP T0_INT
ORG 0030H
MAIN:
MOV SP, #7FH
MOV TMOD,#01H
MOV TL0, #LOW(65536-50000)
MOV TH0, #HIGH(65536-50000)
SETB TR0
MOV IE, #82H
MOV R2, #2
MOV R3, #10
MOV R4, #0
M_LOOP:
LJMP M_LOOP ;等待中断,一切闪动、移位,都在中断里面解决
;----------------------------------------------------------------
T0_INT:
MOV TL0, #LOW(65536-50000)
MOV TH0, #HIGH(65536-50000)
DJNZ R2, T0_END
MOV R2, #2 ;加大此数字,如改为8,可降低速度,便于观察
INC R4
DJNZ R3, FLASH ;100ms减一次一
MOV R3, #10
INC R6 ;1s加一次一
FLASH:
MOV A, R6
ANL A, #7
MOV R5, A ;0~7, 1s换一次位
INC R5
MOV A, R4
MOV C, ACC0
MOV A, #255
MOV P1, A ;关显示
T0_LOOP:
RLC A
DJNZ R5, T0_LOOP
MOV P1, A
T0_END:
RETI
;------------------------------------------------------------
END
程序如下:
#include <reg52h>
sbit led1 = P2^0;
sbit led2 = P2^1;
sbit led3 = P2^2;
sbit led4 = P2^3。
让电子信息技术与单片机技术相融合,有效提高了单片机应用效果。作为计算机技术中的一个分支,单片机技术在电子产品领域的应用,丰富了电子产品的功能,也为智能化电子设备的开发和应用提供了新的出路,实现了智能化电子设备的创新与发展。
从二十世纪九十年代开始,单片机技术就已经发展起来,随着时代的进步与科技的发展,目前该技术的实践应用日渐成熟,单片机被广泛应用于各个领域。现如今,人们越来越重视单片机在智能电子技术方面的开发和应用,单片机的发展进入到新的时期。
无论是自动测量还是智能仪表的实践,都能看到单片机技术的身影。当前工业发展进程中,电子行业属于新兴产业,工业生产中人们将电子信息技术成功运用。
单片机实验,其实这就是典型的流水灯电路,P1口接8个流水灯,每个灯点亮1秒。用定时器T1定时50ms,中断20次就为1秒,可用_crol_()移位函数实现。仿真效果如下图所示。
#include<reg51h>
sbit led=P1^0; //单片机管脚位声明
void main()
{
TMOD=0x01; //定时器TO工作在方式1
TH0=(65536-5000)/256; //装初值,12M晶振 1为1us; 5000为5000us=5ms;
TL0=(65536-5000)%256;
EA =1; //开总中断
ET0=1; //开定时器TO中断
TR0=1; //启动定时器
P1=0; //初始化P1口
while(1) ; //程序在这里等待中断发生
}
void T0_time() interrupt 1
{
unsigned char num;
TH0=(65536-5000)/256;
TL0=(65536-5000)%256;
num++;
if(num==100) //05S (1s闪烁1次==05S亮05S灭)
{
num=0;
led=~led; //led状态取反
}
}
给你发个产品的真实程序,控制交流滑差电机,既检测控制速度,又检测实际速度,还根据检测值控制电机在控制速度值下平稳运行。
ORG
0000H
;主轴控制程序
START:
AJMP
MAIN
;
REALSPDL
EQU
30H
REALSPDH
EQU
31H
CMPSPDL
EQU
32H
CMPSPDH
EQU
33H
ADJSPD
EQU
34H
BKCNT
EQU
35H
T0COUNT
EQU
36H
T1COUNT
EQU
37H
IOSPDL
EQU
38H
IOSPDH
EQU
39H
T_TMP
EQU
3AH
T_MS
EQU
3BH
T_250MS
EQU
3CH
CH1
EQU
3AH
CH2
EQU
3BH
UPSPD
EQU
2
DNSPD
EQU
2
STOPB
EQU
P14
RUNB
EQU
P13
LAMPB
EQU
P37
PZB
EQU
P34
PAB
EQU
P33
SPDB
EQU
P32
BREAKB
EQU
P11
ENABLE
EQU
P10
;-----------------------------------
ORG
0003H
SJMP
IE0DEAL
ORG
000BH
SJMP
TF0DEAL
ORG
0013H
SJMP
IE1DEAL
ORG
001BH
SJMP
TF1DEAL
ORG
0023H
SJMP
RITIDEAL
;------------------------------------
ORG
0030H
IE0DEAL:
CLR
TR0
MOV
IOSPDL,TL0
MOV
IOSPDH,TH0
MOV
TL0,#0
MOV
TH0,#0
SETB
TR0
PUSH
ACC
CLR
02H
MOV
A,REALSPDH
CLR
C
SUBB
A,#2
JC
IE0D2
SETB
02H
IE0D2:
POP
ACC
IE0D3:
RETI
;------------------------------------
TF0DEAL:
SETB
01H
RETI
;------------------------------------
IE1DEAL:
CLR
TR1
MOV
REALSPDL,TL1
MOV
REALSPDH,TH1
MOV
TL1,#0
MOV
TH1,#0
SETB
TR1
JB
03H,IE1D1
INC
T1COUNT
MOV
A,T1COUNT
CLR
C
SUBB
A,#250
JC
IE1D1
MOV
T1COUNT,#0
INC
T0COUNT
MOV
A,T0COUNT
CLR
C
SUBB
A,#4
JC
IE1D1
MOV
T0COUNT,#0
SETB
03H
IE1D1:
CLR
01H
RETI
;------------------------------------
TF1DEAL:
SETB
01H
MOV
REALSPDL,#0FFH
MOV
REALSPDH,#0FFH
RETI
;------------------------------------
RITIDEAL:
RETI
;
DELAY2:
MOV
T_TMP,#0F9H
;0FAH=1ms
DJNZ
T_TMP,$
DJNZ
T_MS,DELAY2
;3EH=ms
RET
;------------------------------------------------------------------------------
DELAY3:
MOV
T_MS,#0FAH
;0FAH=250ms
LCALL
DELAY2
DJNZ
T_250MS,DELAY3
;3FH=250ms
RET
;------------------------------------
MAIN:
CLR
EA
CLR
ET0
CLR
ET1
CLR
EX0
CLR
EX1
CLR
TR0
CLR
TR1
SETB
RUNB
SETB
STOPB
MOV
SP,#60H
MOV
TMOD,#11H
MOV
TCON,#05H
MOV
TL0,#0
MOV
TH0,#0
MOV
TL1,#0
MOV
TH1,#0
MOV
T_250MS,#20
LCALL
DELAY3
SETB
TR0
SETB
TR1
SETB
ET0
SETB
ET1
SETB
EX0
SETB
EX1
SETB
EA
MOV
T1COUNT,#0
MOV
T0COUNT,#0
SETB
BREAKB
SETB
ENABLE
SETB
01H
CLR
03H
CLR
04H
SETB
RUNB
SETB
STOPB
MOV
T_MS,#100
LCALL
DELAY2
INIT:
JB
RUNB,LOOP
MOV
T_MS,#200
LCALL
DELAY2
CPL
P37
SJMP
INIT
LOOP:
JNB
RUNB,CONTINUE
LOOP0:
JNB
STOPB,STOPP
RESUME:
SETB
BREAKB
SETB
ENABLE
SETB
01H
CLR
P37
MOV
TL0,#0
MOV
TH0,#0
MOV
TL1,#0
MOV
TH1,#0
MOV
T1COUNT,#0
MOV
T0COUNT,#0
MOV
BKCNT,#0
CLR
03H
CLR
04H
SJMP
LOOP
CONTINUE:
JB
01H,CNT1
LCALL
COMPARE
JZ
CNT3
CJNE
A,#0FFH,CNT2
CNT1:
SETB
BREAKB
CLR
ENABLE
SJMP
LOOP
CNT2:
SETB
BREAKB
SETB
ENABLE
SJMP
LOOP
CNT3:
JB
02H,CNT2
JNB
03H,CNT2
CLR
BREAKB
SETB
ENABLE
CNT4:
SJMP
LOOP
;------------------------------------
STOPP:
CLR
BREAKB
SETB
ENABLE
STOPP1:
JNB
STOPB,STOPP1
SETB
BREAKB
SETB
ENABLE
SJMP
LOOP
;------------------------------------
COMPARE:
MOV
A,REALSPDL
ADD
A,#1
MOV
CMPSPDL,A
MOV
A,REALSPDH
ADDC
A,#0
MOV
CMPSPDH,A
CLR
C
MOV
A,CMPSPDL
SUBB
A,IOSPDL
MOV
CMPSPDL,A
MOV
A,CMPSPDH
SUBB
A,IOSPDH
MOV
CMPSPDH,A
JC
COM11
;MORE
JZ
COM12
COM10:
MOV
A,#0FFH
RET
COM11:
MOV
A,#00H
RET
COM12:
LCALL
GETADJ
CLR
C
MOV
A,CMPSPDL
SUBB
A,ADJSPD
JNC
COM10
MOV
A,#0A0H
RET
;------------------------------------
GETADJ:
MOV
A,IOSPDH
JNZ
GETADJ0
MOV
A,IOSPDL
SUBB
A,#79
JNC
GETADJ01
MOV
ADJSPD,#3
;>700
RET
GETADJ01:
SUBB
A,#32
JNC
GETADJ03
MOV
ADJSPD,#6
;500~700
RET
GETADJ03:
SUBB
A,#73
JNC
GETADJ04
MOV
ADJSPD,#10
;300~500
RET
GETADJ04:
MOV
ADJSPD,#16
;216~300
RET
GETADJ0:
MOV
A,REALSPDH
SUBB
A,#2
JC
GETADJ1
MOV
ADJSPD,#3
;<108
RET
GETADJ1:
MOV
A,REALSPDL
SETB
C
RRC
A
SUBB
A,#150
JNC
GETADJ2
MOV
ADJSPD,#24
;>200
RET
GETADJ2:
SUBB
A,#50
JNC
GETADJ3
MOV
ADJSPD,#48
;150~200
RET
GETADJ3:
MOV
ADJSPD,#96
;<150
RET
;------------------------------------
END
比如如下:
ORG 0000H ;程序入口
LJMP MAIN
ORG 0003H ;中断向量
LJMP EXT0
ORG 0030H
MAIN:
MOV SP,#5FH
SETB IT0
SETB EX0
SETB EA ;以上初始化
LOOP:
JB P10,LOOP1
CLR P00
SJMP LOOP
LOOP1:
SETB P00
SJMP LOOP ;以上主循环
EXT0:
RETI
END
;以上就是一个比较简单的单片机程序框架:包括:程序入口,中断,主循环
#include<reg51h>
#define uchar unsigned char
uchar tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00}; //0到9
uchar num,cnt,disn;
uchar keyval,disk;
uchar led[]={1,2,3,4};
void dealdat(uchar a)
{
led[0]=0;
led[1]=0;
led[2]=0;
led[3]=0;
led[a]=disk;
}
void delay(unsigned int a)
{
unsigned int i,j;
for(i=0;i<a;i++)
for(j=0;j<1000;j++);
}
void t0isr() interrupt 1
{
TH0=(65536-5000)/256;
TL0=(65536-5000)%256;
switch(num)
{
case 0:P2=0x01;break;
case 1:P2=0x02;break;
case 2:P2=0x04;break;
case 3:P2=0x08;break;
default:break;
}
P0=~tab[led[num]];
num++;
num&=0x03;
cnt++;
if(cnt>100)
{
cnt=0;
disn++;
disn%=4;
dealdat(disn);
}
}
uchar kbscan(void)
{
unsigned char sccode,recode;
P3=0x0f; //发0扫描,列线输入
if ((P3 & 0x0f) != 0x0f) //有键按下
{
// delay(20); //延时去抖动
if ((P3&0x0f)!= 0x0f)
{
sccode = 0xef; //逐行扫描初值
while((sccode&0x01)!=0)
{
P3=sccode;
if((P3&0x0f)!=0x0f)
{
recode=(P3&0x0f)|0xf0;
return((~sccode)+(~recode));
}
else
sccode=(sccode<<1)|0x01;
}
}
}
return 0; //无键按下,返回0
}
void getkey(void)
{
unsigned char key;
key=kbscan();
if(key==0){keyval=0xff;return;}
switch(key)
{
case 0x11:keyval=7;break;
case 0x12:keyval=4;break;
case 0x14:keyval=1;break;
case 0x18:keyval=10;break;
case 0x21:keyval=8;break;
case 0x22:keyval=5;break;
case 0x24:keyval=2;break;
case 0x28:keyval=0;break;
case 0x41:keyval=9;break;
case 0x42:keyval=6;break;
case 0x44:keyval=3;break;
case 0x48:keyval=11;break;
case 0x81:keyval=12;break;
case 0x82:keyval=13;break;
case 0x84:keyval=14;break;
case 0x88:keyval=15;break;
default:keyval=0xff;break;
}
}
main()
{
TMOD=0x11;
TH0=(65536-5000)/256;
TL0=(65536-5000)%256;
TR0=1;
ET0=1;
EA=1;
while(1)
{
getkey();
if(keyval!=0xff)disk=keyval;
delay(10);
}
}
以上就是关于单片机程序设计 很简单的 高分悬赏全部的内容,包括:单片机程序设计 很简单的 高分悬赏、单片机流水灯程序、单片机实验 编写程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)