单片机上课复习内容.docx
《单片机上课复习内容.docx》由会员分享,可在线阅读,更多相关《单片机上课复习内容.docx(21页珍藏版)》请在冰豆网上搜索。
单片机上课复习内容
第一次
1.单片机的实质:
微型计算机
2.电平:
单片机电平高:
+5V低:
0V
RS232电平高:
-12V低:
+12V
计算机与单片机通信要加电平转换芯片max232
3.二进制与十六进制的转换
4.逻辑运算
5.单片机的内部结构:
6.
7.
8.
第一次
9.
第二次
1.时序电路机器周期=12振荡周期
Fosc=6MHZ机器周期=12*(1/6)=2uS
2.复位电路(理解工作原理)
3.单片机的存储器结构
片内和片外存储器
程序存储器和数据存储器
4.片内数据存储器的结构(256Byte)
高128字节SFR
低128字节分3个区域00H-1FH工作寄存器区
20H-2FH可位寻址区
30H-7FH用户RAM区
5.片内程序存储器的空间0000H-0FFFH4KB
6.地址线是A0-A14,那么他的存储空间是215=32KB
1根,地址空间=20,1
2根,地址空间=400,01,10,11
……
第三次
软件的使用
第四次
1.P0-P3是准双向口,即可做输入又可作输出,由程序决定
2.当P0作为输出时,必须外接上拉电阻;作为输入,必须先向相应的锁存器写“1”,才不会影响输入电平。
P0=0xff;
3.具有片外扩展存储器的系统中,P2口作为高8位地址线,P0口分时作为低8位地址线和双向数据总线。
第五次数据类型与表达式
1.数据类型
格式:
Charintlongbit+变量名
SfrP0=0x80;Sfr16T2=0xcc;sbitled=P1^0;
2.变量和常量
区别:
大小写
赋值的区别:
变量名字=数值a=127;
#define常量名字数值#defineCONST60
3.运算符
逻辑运算符!
&&||
位操作运算符~&|^
第六次c语言的基本语句
顺序选择循环
1.
选择语句
if(表达式)
{
语句组;
}
if(表达式)
{
语句组1;
}
else
{
语句组2;
}
if(表达式1)
{
语句组1;
}
elseif(表达式2)
{
语句组2;
}
…
elseif(表达式n)
{
语句组n;
}
else
{
语句组n+1;
}
多分支选择的switch语句,其一般形式如下:
switch(表达式)
{
case常量表达式1:
语句组1;break;
case常量表达式2:
语句组2;break;
……
case常量表达式n:
语句组n;break;
default:
语句组n+1;
}
2.循环语句
while(循环继续的条件表达式)
{语句组;}
for(循环变量赋初值;循环继续条件;循环变量增值)
{循环体语句组;}
流水灯:
#include
delay(unsignedintn);
unsignedchara=0xfe,b,c,i,m=2;
main()
{
while
(1)
{
for(i=8;i>0;i--)
{
P1=a;
delay(1000);
b=a<c=a>>(8-m);
a=b|c;
}
}
}
delay(unsignedintn)
{
unsignedinta,b;
for(a=1000;a>0;a--)
for(b=n;b>0;b--);
}
书上P933.3.2
#include
delay(unsignedintn);
unsignedcharw,i,m;
main()
{
while
(1)
{
w=0x10;
m=0x08;
for(i=4;i>0;i--)
{
P1=~(w|m);
delay(1000);
w=w<<1;
m=m>>1;
}
}
}
delay(unsignedintn)
{
unsignedinta,b;
for(a=1000;a>0;a--)
for(b=n;b>0;b--);
}
第九次课中断
1.了解中断的概念
2.掌握中断的处理过程:
中断请求,中断响应,中断处理,中断返回
3.51系列单片机有几个中断源?
中断源编号
外部中断00
定时器T0中断1
外部中断12
定时器T1中断3
串行口中断4
4.中断响应的条件
中断源有中断请求;此中断源的中断允许位为1;CPU开中断(即EA=1)。
5.中断允许寄存器IE
EA:
=1CPU开总中断,=0关,禁止所有中断
EX0外部中断0的中断允许
ET0
EX1
ET1
ES
6.TCON
IT0和IT1/INT0和1的触发方式位
=0低电平触发=1下降沿触发
IE0和IE1外部中断的中断标志
TF0和TF1
7.了解优先级IP
第十次课外部中断编程
1.利用INT0作为外部中断输入线,每按一次开关K使P2口处的LED改变一下状态(由全亮到全灭或由全灭到全亮)。
#include
unsignedchara;
main()
{
EA=1;//CPU开总中断
EX0=1;//外部中断0开中断
IT0=1;//选择中断触发方式(中断初始化)
while
(1)
{
P2=a;
}
}
voidex0()interrupt0
{
a=~a;
}
2.
定时器/计数器中断初始化:
程序应完成如下工作:
▪对TMOD赋值,以确定T0和T1的工作方式。
▪计算初值,并将其写入TH0、TL0或TH1、TL1。
▪中断方式时,则对IE赋值,开放中断。
▪使TR0或TR1置位,启动定时/计数器定时或计数。
EA=1;
ET0=1;
TMOD=0xGATEC/T非M1M0GATEC/TM1M0
T1T0
11=计数器工作方式选择(方式1=16方式2=8位)
0=定时器
TH0=0x=(计数初值)/256
TL0=0x=(计数初值)%256
计数初值=(2的n次幂-计数个数)
N=16或8
TR0=1
T1工作于定时方式2,定时时间T=200uS,系统主频f=6MHZ,允许中断,对T1进行初始化编程.
EA=1;//CPU开总中断
ET0=1;//中断源开中断
TMOD=0x01;//编写TMODGATEC/TM1M0
TH0=(65536-10000)/256;
TL0=(65536-10000)%256;//计数初值=(2的n次幂-计数个数)
TR0=1;//开启定时计数器
设单片机晶振频率f=6MHZ,使用定时器T1以方式1产生周期为500uS的等宽正方形脉冲,并由P1.0脚输出。
P1.0
#include
main()
{
TMOD=0x20;
TH1=256-125;
TL1=256-125;
EA=1;
ET1=1;
TR1=1;
while
(1);
}
voidtimer1()interrupt3
{
P1_0=!
P1_0;
}
设单片机晶振频率f=6MHZ,使用定时器T1以方式1产生周期为1S的等宽正方形脉冲,并由P1.0脚输出。
#include
unsignedchara=0;
main()
{
TMOD=0x10;
TH1=(65536-100000/2)/256;
TL1=(65536-50000)%256;
EA=1;
ET1=1;
TR1=1;
while
(1);
}
voidtimer1()interrupt3
{
a++;
while(a==5)
{P1_0=!
P1_0;a=0;}
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
}
设单片机晶振频率f=12MHZ,使用定时器T0以方式1在P1口每隔1S向右流动的流水灯。
机器周期=1uS最长计时时间=65536*1uS=65.536mS
计数值=40000计时时间=40mS
方法一:
采用中断方式
#include
unsignedintnum,w,i;
main()
{
TMOD=0x01;
TH0=(65536-40000)/256;
TL0=(65536-40000)%256;
EA=1;
ET0=1;
TR0=1;//中断初始化
while
(1)
{
w=0x80;
for(i=8;i>0;i--)
{
P1=~w;
while(num!
=350);
w=w>>1;
num=0;
}
/*P1=~w;
if(num==250)
{
w=w>>1;
num=0;
}
if(w==0x00)w=0x80;*/
}
}
voidtimer0()interrupt1
{
TH0=(65536-40000)/256;
TL0=(65536-40000)%256;
num++;
}
方法二:
采用查询方式
#include
voiddelay1s()
{
unsignedchari;
for(i=0;i<20;i++)
{
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
TR1=1;
while(!
TF1);
TF1=0;
}
}
voidmain()
{
unsignedchari,w;
TMOD=0x10;
while
(1)
{
w=0x01;
for(i=0;i<8;i++)
{P1=~w;w=w<<1;delay1s();}
}
}
采用10MHZ晶振,在P1.0脚上输出周期为2.5s,占空比为20%的脉冲信号。
#include
voiddelay(unsignedchara)
{
unsignedchari;
for(i=0;i{
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
TR1=1;
while(!
TF1);
TF1=0;
}
}
voidmain()
{
TMOD=0x10;
while
(1)
{
P1_0=1;
delay(10);
P1_0=0;
delay(40);
}
}
第五章显示和键盘接口技术
1.LED数码管的连接方式:
共阴共阳
2.LED数码管的显示方式:
静态动态
3.0-9的字型码计算。
4.动态显示的工作原理
5.静态显示03257
#include
#defineucharunsignedchar
ucharcodedispcode[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0xfe,0x67};
sbitDIN=P1^0;
sbitCLK=P1^1;
uchardispb[5];
voidsent(ucharx)//送段选码的程序
{
uchari,ch;
ch=x;
for(i=0;i<8;i++)
{ch=ch<<1;DIN=CY;CLK=0;CLK=1;}//串入并出的编程。
图中的A和B并在一起是DIN,也就是要并行输出的数据从DIN串行输入(一个一个的送入,送八次就是一个字节),这8位从Q0-Q7输出
}
voiddisplay(void)//显示程序
{
uchara;
for(a=0;a<=4;a++)
sent(dispb[4-a]);//先送6的字形码,然后先后移位,6移到第二位,右边第一位送一个5的字形码,6
}
main()//显示03257
{
dispb[0]=dispcode[0];
dispb[1]=dispcode[3];
dispb[2]=dispcode[2];
dispb[3]=dispcode[5];
dispb[4]=dispcode[7];
display();
}