单片机基础知识单片机的外部结构:1、 DIP40双列直插;2、 P0,P1,P2,P3四个8位准双向I/O引脚;(作为I/O输入时,要先输出高电平)3、 电源VCC(PIN40)和地线GND(PIN20);4、 高电平复位RESET(PIN9);(10uF电容接VCC与RESET,即可实现上电复位)5、 内置振荡电路,外部只要接晶体至X1(PIN18)和X0(PIN19);(频率为主频的12倍)6、 程序配置EA(PIN31)接高电平VCC;(运行单片机内部ROM中的程序)7、 P3支持第二功能:RXD、TXD、INT0、INT1、T0、T1 单片机内部I/O部件:(所为学习单片机,实际上就是编程控制以下I/O部件,完成指定任务)1、 四个8位通用I/O端口,对应引脚P0、P1、P2和P3;2、 两个16位定时计数器;(TMOD,TCON,TL0,TH0,TL1,TH1)3、 一个串行通信接口;(SCON,SBUF)4、 一个中断控制器;(IE,IP)针对AT89C52单片机,头文件AT89x52.h给出了SFR特殊功能寄存器所有端口的定义。教科书的160页给出了针对MCS51系列单片机的C语言扩展变量类型。 C语言编程基础:1、 十六进制表示字节0x5a:二进制为01011010B;0x6E为01101110。2、 如果将一个16位二进数赋给一个8位的字节变量,则自动截断为低8位,而丢掉高8位。3、 ++var表示对变量var先增一;var—表示对变量后减一。4、 x |= 0x0f;表示为 x = x | 0x0f;5、 TMOD = ( TMOD & 0xf0 ) | 0x05;表示给变量TMOD的低四位赋值0x5,而不改变TMOD的高四位。6、 While( 1 ); 表示无限执行该语句,即死循环。语句后的分号表示空循环体,也就是{;}第一章 单片机最小应用系统:单片机最小系统的硬件原理接线图:1、 接电源:VCC(PIN40)、GND(PIN20)。加接退耦电容0.1uF2、 接晶体:X1(PIN18)、X2(PIN19)。注意标出晶体频率(选用12MHz),还有辅助电容30pF3、 接复位:RES(PIN9)。接上电复位电路,以及手动复位电路,分析复位工作原理4、 接配置:EA(PIN31)。说明原因。第二章 基本I/O口的应用第三章 显示驱动第七章 串行接口应用
标签: 单片机
上传时间: 2013-10-30
上传用户:athjac
/* 4位8段数码管分别动态显示“1234”, */ #include "7LEDShow.h" void main() { DIGPORT = 0; // 关闭显示 TMOD = 0x01; // T0工作方式1 /* 2ms 定时设置 */ time0_tmp = 65536-time0*fosc/12; TH0 = (time0_tmp/256); TL0 = (time0_tmp%256); TR0 = 1; ET0 = 1; EA = 1; digbit = 0x01; // 从第一位数码管开始
上传时间: 2013-12-11
上传用户:kachleen
SM-IIC/2051 模块用户说明简介:SM-IIC/2051 是一个基于2051 单片机的I2C 总线控制模块。上位机接口可直接与PC的RS232 连接,下位机可实现对应用电路中I2C 控制总线的连接,块内设置2K 的FLASH 存储器,可存储用户I2C 初始化数据。模块采用2051 单片机,使电路简单可靠。型号:SM-IIC/2051名称:I2C 数据控制模块功能:RS232 串行信号与I2C 数据转换 接口说明:编号信号标志信号名称规格备注CK1-1 VCC 供电+5VCK1-2 VCC 供电+5VCK1-3 GND 地GroundCK1-4 GND 地GroundCK2-1 TOUT 串口输出RS232CK2-2 RIN 串口输入RS232CK2-3 GND 地GroundCK2-4 GND 地Ground编号信号标志信号名称规格备注CK3-1 GND 地GroundCK3-2 SCL I2C 时钟TTLCK3-3 SDA I2C 数据TTLCK3-4 GND 地GroundCK3-5 P1.2 PI/O 端口TTLCK3-6 P1.3 PI/O 端口TTLCK3-7 P1.4 PI/O 端口TTLCK3-8 P1.5 PI/O 端口TTLCK3-9 P1.6 PI/O 端口TTLCK3-10 P1.7 PI/O 端口TTLCK3-11 P3.7 PI/O 端口TTLCK3-12 T1 定时端口TTLCK3-13 T0 定时端口TTLCK3-14 INT1 中断端口TTLCK3-15 INT0 中断端口TTLCK3-16 GND 地Ground
上传时间: 2013-11-18
上传用户:爺的气质
温湿度传感器 sht11 仿真程序 sbit out =P3^0; //加热口 //sbit input =P1^1;//检测口 //sbit speek =P2^0;//报警 sbit clo =P3^7;//时钟 sbit ST =P3^5;//开始 sbit EOC =P3^6;//成功信号 sbit gwei =P3^4;//个位 sbit swei =P3^3;//十位 sbit bwei =P3^2;//百位 sbit qwei =P3^1;//千位 sbit speak =P0^0;//报警音 sbit bjled =P0^1;//报警灯 sbit zcled =P0^2;//正常LED int count; uchar xianzhi;//取转换结果 uchar seth;//高时间 uchar setl;//低时间 uchar seth_mi;//高时间 uchar setl_mi;//低时间 bit hlbz;//高低标志 bit clbz; bit spbz; ///定时中断程序/// void T0 (void) interrupt 1 using 0 { TH0=(65536-200)/256;//5ms*200=1000ms=1s TL0=(65536-200)%256; clo=!clo;//产生时钟 if(count>5000) { if(hlbz) { if(seth_mi==0){seth_mi=seth;hlbz=0;out=0;} else seth_mi--; } if(!hlbz) { if(setl_mi==0){setl_mi=setl;hlbz=1;out=1;} else setl_mi--; } count=0; } else count++; } ///////////// ///////延时/////// delay(int i) { while(--i); } ///////显示处理/////// xianshi() { int abcd=0; int i; for (i=0;i<5;i++) { abcd=xianzhi; gwei=1; swei=1; bwei=1; qwei=1; P1=dispcode[abcd/1000]; qwei=0; delay(70); qwei=1; abcd=abcd%1000; P1=dispcode[abcd/100]; bwei=0; delay(70); bwei=1; abcd=abcd%100; P1=dispcode[abcd/10]; swei=0; delay(70); swei=1; abcd=abcd%10; P1=dispcode[abcd]; gwei=0; delay(70); gwei=1; } } doing() { if(xianzhi>100) {bjled=0;speak=1;zcled=1;} else {bjled=1;speak=0;zcled=0;} } void main(void) { seth=60;//h60秒 setl=90;//l90秒 seth_mi=60;//h60秒 setl_mi=90;//l90秒 TMOD=0X01;//定时0 16位工作模式 TH0=(65536-200)/256; TL0=(65536-200)%256; TR0=1; //开始计时 ET0=1; //开定时0中断 EA=1; //开全中断 while(1) { ST=0; _nop_(); ST=1; _nop_(); ST=0; // EOC=0; xianshi(); while(!EOC) { xianshi(); } xianzhi=P2; xianshi(); doing(); } }
上传时间: 2013-11-07
上传用户:我们的船长
温湿度传感器 sht11 仿真程序 sbit out =P3^0; //加热口 //sbit input =P1^1;//检测口 //sbit speek =P2^0;//报警 sbit clo =P3^7;//时钟 sbit ST =P3^5;//开始 sbit EOC =P3^6;//成功信号 sbit gwei =P3^4;//个位 sbit swei =P3^3;//十位 sbit bwei =P3^2;//百位 sbit qwei =P3^1;//千位 sbit speak =P0^0;//报警音 sbit bjled =P0^1;//报警灯 sbit zcled =P0^2;//正常LED int count; uchar xianzhi;//取转换结果 uchar seth;//高时间 uchar setl;//低时间 uchar seth_mi;//高时间 uchar setl_mi;//低时间 bit hlbz;//高低标志 bit clbz; bit spbz; ///定时中断程序/// void T0 (void) interrupt 1 using 0 { TH0=(65536-200)/256;//5ms*200=1000ms=1s TL0=(65536-200)%256; clo=!clo;//产生时钟 if(count>5000) { if(hlbz) { if(seth_mi==0){seth_mi=seth;hlbz=0;out=0;} else seth_mi--; } if(!hlbz) { if(setl_mi==0){setl_mi=setl;hlbz=1;out=1;} else setl_mi--; } count=0; } else count++; } ///////////// ///////延时/////// delay(int i) { while(--i); } ///////显示处理/////// xianshi() { int abcd=0; int i; for (i=0;i<5;i++) { abcd=xianzhi; gwei=1; swei=1; bwei=1; qwei=1; P1=dispcode[abcd/1000]; qwei=0; delay(70); qwei=1; abcd=abcd%1000; P1=dispcode[abcd/100]; bwei=0; delay(70); bwei=1; abcd=abcd%100; P1=dispcode[abcd/10]; swei=0; delay(70); swei=1; abcd=abcd%10; P1=dispcode[abcd]; gwei=0; delay(70); gwei=1; } } doing() { if(xianzhi>100) {bjled=0;speak=1;zcled=1;} else {bjled=1;speak=0;zcled=0;} } void main(void) { seth=60;//h60秒 setl=90;//l90秒 seth_mi=60;//h60秒 setl_mi=90;//l90秒 TMOD=0X01;//定时0 16位工作模式 TH0=(65536-200)/256; TL0=(65536-200)%256; TR0=1; //开始计时 ET0=1; //开定时0中断 EA=1; //开全中断 while(1) { ST=0; _nop_(); ST=1; _nop_(); ST=0; // EOC=0; xianshi(); while(!EOC) { xianshi(); } xianzhi=P2; xianshi(); doing(); } }
上传时间: 2013-10-16
上传用户:黄蛋的蛋黄
采用的是康力山等人确定的实验参数。 对于n个城市的旅行商问题,其参数如下: 初始温度:T0=280, 每一个温度下采用固定的迭代次数L=100n, 温度的衰减系数alpha=0.92 算法停止的准则是当相邻两个温度得到的解变化很小时算法停止。
上传时间: 2013-12-16
上传用户:xhz1993
仿真1:首先把网络温度参数T固定在100,按工作规则共进行1000次状态更新,把这1000次状态转移中网络中的各个状态出现的次数Si(i=1,2,…,16)记录下来 按下式计算各个状态出现的实际频率: Pi=Si/∑i=1,NSi=Si/M 同时按照Bo1tzmann分布计算网络各个状态出现概率的理论值: Q(Ei)=(1/Z)exp(-Ei/T) 仿真2:实施降温方案,重新计算 采用快速降温方案:T(t)= T0/(1+t) T从1000降到0.01,按工作规则更新网络状态 当T=0.01时结束降温,再让T保持在0.01进行1000次状态转移,比较两种概率
上传时间: 2014-01-19
上传用户:独孤求源
编写一个延时1MS子程序根据题目选择是定时还是记数状态,本题选择记数状态。然后根据延时1MS计算出计时器的初值是E0H(高8位)18H(低5位)。最后编写算法,对T0初始化,利用T0的中断TF0调用中断处理程序。
上传时间: 2015-03-22
上传用户:stewart·
显示数据在70H-75H单元内,用六位LED共阳数码管显示,P1口输出段码数据,P3口作 扫描控制,每个LED数码管亮1MS时间再逐位循环。 定时器T0、T1溢出周期为50MS,T0为秒计数用, T1为调整时闪烁用, P3.7为调整按钮,P1口 为字符输出口,采用共阳显示管。
上传时间: 2013-12-02
上传用户:kr770906
移植到MCS51的uCOS_II。 1。在文件OS_CORE.C中OSMapTbl和OSUnMapTbl数组用于查表,所以应该放在code里。 增加code关键字。UCOS_II.H和OS_CORE.C。 2。OS_CFG.H堆栈大小MaxStkSize改为900。 3。OS_CPU_C.C的InitTimer0函数增加了关于开T0中断的解释。 允许T0中断,此时EA=0(51上电缺省值),中断还不会发生,满足在OSStart()前不产生中断的要求。 4。修改中断处理流程,以便严密监视中断嵌套情况。每个中断进入后立即进行OSIntNesting+1原语操作。 5。增加printf函数的移植,支持灵活的数据显示。支持标准或长二进制/八进制/十进制/十六进制/无符号整数, 支持字符、字符串、浮点数、百分号%。其中,浮点数在整个范围内被完全支持,统一采用科学记数法显示。
标签: OSUnMapTbl OSMapTbl uCOS_II OS_CORE
上传时间: 2014-01-13
上传用户:daoxiang126