导航:首页 > 操作系统 > mcs51单片机怎么调压

mcs51单片机怎么调压

发布时间:2023-10-28 23:38:07

‘壹’ mcs 51系列单片机

1.coms工艺
2.利用编程器将用户程序送人单片机的存储器,检查程序,修改程序,监视单片机的工作状态。
3.51有5个中断源
4.Mcs-51是8位单片机;I/O的特点有具有双向通道,数据锁存,输入缓冲;P3.0和P3.1分别是串行输入口和WR串行输出口;作为输入时应该注意*****。
5.Mcs-51单片机中振荡电路,片内有一个高增益反向放大器,用于构成振荡器。外接晶振,反相器的输入端和输出端跨接石英晶体和两个电容就构成了稳定的自激振荡器。
6.51单片机的封装引脚有三种类型:40脚DIP,44脚PLCC,48脚DIP,52脚PLCC,68脚PLCC。引脚定义:1--8:P0.0--0.7,9:RST/Vpd,10--17:P3.0-P3.7,18:XTAL2,19:XTAL1,20:Vss,21--28:P2.0-P2.7,29:~PSEN ,30:ALE/~PROG,31:~EA/pp,32--39:P0.7-P0.0,40:Vcc。
7.单片机片内,片外存储器的选择:(程序存储器)由硬件控制信号~EA/Vpp决定,(数据存储器)由软件指令是MOVX还是MOV决定;
8.MCS-51的程序存储器用于存放运算中间结果。
9.PSW是一个8位的专用寄存器,用于存程序运行中的各种状态信息。
10.决定程序执行顺序的寄存器是程序计数器PC。
11.ALE引脚的特点:(访问外部存储器时)信号上升沿可作16为地址低8位的所存信号,信号在两个机器周期中出现一次;(不访问时)向外输出振荡频率1/6的脉冲信号,可作其他外部接口的时钟信号。通过该信号可以判断 CPU是否正常工作
12.MOVC的功能:用于读取程序存储器表格的数据传送
13:51的指令寄存器是对指令寄存器中的指令进行译码,将指令转变为执行此指令所需的电信号。
完整的指令格式:由操作码和操作数组成
   DAC0832的输入电平与TTL电平兼容。
  AD与DA的作用是:AD的作用是把模拟信号转换成数字信号,DA的作用是把数字信号转换成模拟信号。 0809是8位的AD转换器及有11个模拟输入通道,4位地址输入选择。17.  DAC0832是电流输出型数模转换芯片,分辨率8位,三种工作方式:直通,单缓冲,双缓冲。
  单片机的复位电路的特点:简单而重要,上电复位靠电容充电,按键复位靠RC微分电路产生正脉冲和电阻与VCC电源接通。是第9引脚复位。单片机开始工作前需要复位,单片机受到干扰后程序跑飞需要复位。
单片机最小系统硬件设计图。由复位电路、晶振电路和单片机组成,单片机~EA端一般接高。
  MCS—51单片机最小系统的振荡周期,机器周期,时钟周期的关系:12个振荡周期=1个机器周期=6个时钟周期。
  8051在存储结构上采用哈佛结构。
  串行通信中按数据流的方向分成哪三种基本的传送方式,
  8051与8031的区别是:有无ROM存储器。
  程序状态字寄存器PSW的特点:保存指令执行结果的特征信息。由硬件自动生成。
  计算机总线的分类:数据总线,地址总线,控制总线。或片内总线,片外总线。
  80C51单片机的程序存储器最大寻址范围256B。
  编程:跑马灯程序编写:8个发光二极管流水灯程序编写
LED跑马灯(从右至左)
#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
void DelayMS(uint x)
{
uchar i;
while(x--)
{
for(i=0;i<255;i++);
}
}

void main()
{

P1=0xfe;
while(1)
{ if(P1==0x7f)
P1=0xfe;
else
P1=_crol_(P1,1);
DelayMS(80);
}
}
LED跑马灯(从左至右)
#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
void DelayMS(uint x)
{
uchar i;
while(x--)
{
for(i=0;i<255;i++);
}
}

void main()
{

P1=0x7f;
while(1)
{ if(P1==0xfe)
P1=0x7f;
else
P1=_cror_(P1,1);
DelayMS(40);
}
}
LED跑马灯(左右循环)
#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
void DelayMS(uint x)
{
uchar i;
while(x--)
{
for(i=0;i<255;i++);
}
}

void main()
{
uchar i;
P1=0x7f;
while(1)
{
for(i=0;i<7;i++)
{P1=_cror_(P1,1);
DelayMS(40); }
for(i=0;i<7;i++)
{P1=_crol_(P1,1);
DelayMS(40); }
}
}
单个LED的闪烁
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit LED = P1^0;

void DelayMS(uint x)
{
uchar i;
while(x--)
{
for(i=120;i>0;i--);
}
}

void main()
{
while(1)
{
LED = ~LED;
DelayMS(150);
}
}

连绵灯
#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
void DelayMS(uint x)
{
uchar i;
while(x--)
{
for(i=0;i<255;i++);
}
}

void main()
{

P1=0x0e;
while(1)
{ if(P1==0xc1)
P1=0x0e;
else
P1=_crol_(P1,1);
DelayMS(80);
}
}
/* 花样流水灯程序 间隔300ms先奇数亮再偶数亮,循环三次;一个灯上下循环三次;两个分别从两边往中间流动三次;再从中间往两边流动三次;8个全部闪烁3次;关闭发光管,程序停止。*//*********************************************************/#include<reg52.h> //52单片机头文件#include <intrins.h> //包含有左右循环移位子函数的库#define uint unsigned int //宏定义#define uchar unsigned char //宏定义void delay(uint z) //延时函数,z的取值为这个函数的延时ms数,如delay(200);大约延时200ms.{ //delay(500);大约延时500ms. uint x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); }void main() //主函数{ uchar a,i,j; for(j=0;j<3;j++) //寄偶交替 { P1=0x55; //点亮小灯 delay(300); //延时300毫秒 P1=0xaa; delay(300); //延时300毫秒 } for(j=0;j<3;j++) //流水灯 { a=0xfe; for(i=0;i<8;i++) { P1=a; //点亮小灯 delay(300); //延时300毫秒 a=_crol_(a,1); } } P1=0xff; for(j=0;j<3;j++) //从两边往中间流 { P1=0x7e; //点亮小灯
delay(300); //延时300毫秒 P1=0xbd; delay(300); //延时300毫秒 P1=0xdb; //点亮小灯 delay(300); //延时300毫秒 P1=0xe7; delay(300); //延时300毫秒 } P1=0xff; for(j=0;j<3;j++) //从中间往两边流 { P1=0xe7; //点亮小灯 delay(300); //延时300毫秒 P1=0xdb; delay(300); //延时300毫秒 P1=0xbd; //点亮小灯 delay(300); //延时300毫秒 P1=0x7e; delay(300); //延时300毫秒 } P1=0xff; for(j=0;j<6;j++) //全部闪烁 { P1=~P1; //点亮小灯 delay(300); //延时300毫秒 } P1=0xff; while(1);} a=_crol_(a,1); } } for(j=0;j<3;j++) { a=0xfa; for(i=0;i<5;i++) { P1=a; delay(300); a=_crol_(a,1); } } P1=0xff; for(j=0;j<3;j++) //从两边往中间流 { P1=0x7e; //点亮小灯 delay(300); //延时300毫秒 P1=0xbd; delay(300); //延时300毫秒 P1=0xdb; //点亮小灯 delay(300); //延时300毫秒 P1=0xe7; delay(300); //延时300毫秒 } P1=0xff; for(j=0;j<3;j++) //从中间往两边流 { P1=0xe7; //点亮小灯 delay(300); //延时300毫秒 P1=0xdb; delay(300); //延时300毫秒 P1=0xbd; //点亮小灯 delay(300); //延时300毫秒 P1=0x7e; delay(300); //延时300毫秒 } for(j=0;j<5;j++) { P1=0x66; delay(300); P1=0x99; delay(300); } P1=0xff; for(j=0;j<6;j++) //全部闪烁 { P1=~P1; //点亮小灯 delay(300); //延时300毫秒 } P1=0xff; while(1);}

‘贰’ 为什么51单片机引脚悬空时候电压是5v,接上外设后却只有1.6v了呢

单片机引脚在高电平时输出的电流是很小的,所以直接连接LED的亮度很低,但是单片机在输出低电平时可以允许更大的电流的通过,所以你把LED反着接,这样效果就好了。
像这样:

‘叁’ 基于51单片机的可控硅调压调光程序-带过零检测

程序:
#include<reg52.h>
#include<intrins.h>
sbitledRS=P1^0;
sbitledRW=P1^1;
sbit ledE=P1^2;
sbit keyjia=P2^7;
sbitkeyjian=P2^6;
sbitcontrolLD=P1^3;
bitflag1=1;
bitflag2=1;
unsigned
char code table[]=" guang liang
";
unsignedchar code table1[]=" 00 ";
intnum,flag=0,count=0;
charliang=3;
voiddelaykt(void) //导通延时
{
unsigned char a;
for(a=2;a>0;a--);
}
voiddelay(int z) //可调延时
{
unsigned x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void
delay9ms(void) //误差
-0.43402777778us 延时9ms
{
unsigned char a,b,c;
for(c=1;c>0;c--)
for(b=224;b>0;b--)
for(a=17;a>0;a--);
}
voidwrite_com(unsigned com) //写指令
{
ledRS=0;
P0=com;
delay(10);
ledE=1;
delay(20);
ledE=0;
}
voidwrite_date(unsigned date) //写数据
{
ledRS=1;
P0=date;
delay(10);
ledE=1;
delay(20);
ledE=0;
}
voidwrite_liang(unsigned liang) //写亮度
{
int shi,ge;
shi=(liang-3)/10;
ge=(liang-3)%10;
write_com(0x80+0x40+7);
write_date(0x30+shi);
write_date(0x30+ge);
}
voidinit() //初始化
{
controlLD=1; //触发控制初始化
ledRW=0; //液晶初始化
ledE=0;
write_com(0x38);
write_com(0x0c);
write_com(0x06);
write_com(0x80);
for(num=0;num<15;num++)
{
write_date(table[num]);
delaykt();
}
write_com(0x80+0x40);
for(num=0;num<15;num++)
{
write_date(table1[num]);
delaykt();
}
EA=1; //外部中断设置
EX0=1;
IT0=1;
}
voidkeyscanf() //键盘判断
{
if(keyjia==0) //加键判断
{
delaykt();
if(keyjia==0)
{
if(flag1==1)
{
flag1=0;
liang++;
if(liang==10)
liang=3;
write_com(0x80+0x40+7);
write_liang(liang);
}
}
}
else if(keyjia!=0)
{
delaykt();
if(keyjia!=0)
flag1=1;
}
if(keyjian==0) //减键判断
{
delaykt();
if(keyjian==0)
{
if(flag2==1)
{
flag2=0;
liang--;
if(liang==2)
liang=9;
write_com(0x80+0x40+7);
write_liang(liang);
}
}
}
else if(keyjian!=0)
{
delaykt();
if(keyjian!=0)
flag2=1;
}
}
voidzhongan() interrupt 0 //外部中断
{
flag=1;
}
voidtimepd() //同步标志判断与定时器设置
{
if(flag==1)
{
flag=0;
TMOD=0x01;
TH0=(65536-1000*(10-liang))/256;
TL0=(65536-1000*(10-liang))%256;
ET0=1;
TR0=1;
}
}
voidtime0() interrupt 1 //定时中断程序
{
count=1;
}
voidchufa() //MOS3020触发
{
if(count==1)
{
count=0;
controlLD=0;
delaykt();
controlLD=1;
delay9ms();
controlLD=0;
delaykt();
controlLD=1;
}
}
voidmain()
{
init();
while(1)
{
keyscanf();
timepd();
chufa();
}
}

阅读全文

与mcs51单片机怎么调压相关的资料

热点内容
java常见模式 浏览:500
典欣空调压缩机 浏览:421
app如何认定权限 浏览:849
两个复数相除的角度计算法则 浏览:584
电商类app开发怎么收费 浏览:300
打造电子书反编译工具 浏览:74
压缩比115 浏览:558
pdf怎么抠图 浏览:864
霍妮pdf 浏览:808
反编译VMP 浏览:46
hello编译器 浏览:771
apk程序加密 浏览:595
如何给app重命名 浏览:603
怎么幽默调侃程序员 浏览:285
忘记密码解压视频 浏览:911
运城机场春运加密 浏览:287
安卓手机如何关闭app后台 浏览:154
安卓数字密码忘记怎么破解 浏览:253
pythonzmq模式 浏览:182
linux运行php网站 浏览:867