1. 单片机实验注意事项
单片机开发规则与注意事项
随着大规模集成电路技术的发展,单片微型计算机也随之大发展,各种新颖的单片机层出不穷。单片机具有体积小、重量轻、应用灵活且价格低廉等特点,广泛地应用于人类生活的各个领域,成为当今科学技术现代化不可缺少的重要工具。
单片机系统的开发融合了硬件和软件的相关技术。要完成单片机系统的开发,用户不仅需要掌握编程技术,还需要针对实际应用选择合理的单片机芯片和外围器件,以此为基础,设计硬件电路。
正确估计单片机的能力,知道单片机能做什么,最大程度的挖掘单片机的潜力对一个单片机系统设计者来说是至关重要的。单片机的能力的关键就在软件设计者编写的软件上。只有充分地了解到单片机的能力,才不会做出“冗余”的系统设计。而采用许多的外围芯片来实现单片机能实现的功能。这样做,即增加了系统成本,也可能会降低了系统的可靠性。
要完成单片机系统的开发,用户不仅需要掌握编程技术,还需要针对实际应用选择合理的单片机芯片和外围器件,以此为基础,设计硬件电路。
单片机开发规则与注意事项
设计满足要求的最精简的系统
正确估计单片机的能力,知道单片机能做什么,最大程度的挖掘单片机的潜力对一个单片机系统设计者来说是至关重要的。单片机的能力的关键就在软件设计者编写的软件上。只有充分地了解到单片机的能力,才不会做出“冗余”的系统设计。而采用许多的外围芯片来实现单片机能实现的功能。这样做,即增加了系统成本,也可能会降低了系统的可靠性。
看门狗电路通常是一块在有规律的时间间隔中进行更新的硬件。更新一般由单片机来完成,如果在一定间隔内没能更新看门狗,那看门狗将产生复位信号,重新复位单片机。更新看门狗的具体形式多是给看门狗芯片相关引脚提供一个电平上升沿或读写它的某个寄存器。使用看门狗电路将在单片机发生故障进行死机状态时,重新复位单片机,像EN8F154本身就带有看门狗。
确定系统的复位信号可靠
一般在单片机的数据手册(Datasheet)中都会提到该单片机需要的复位信号的要求。一般复位信号的宽度应为。复位电平的宽度和幅度都应满足芯片的要求,并且要求保持稳定。还有特别重要的一点就是复位电平应与电源上电在同一时刻发生,即芯片一上电,复位信号就已产生。不然,由于没有经过复位,单片机中的寄存器的值为随机值,上电时就会按PC寄存器中的随机内容开始运行程序,这样很容易进行误操作或进入死机状态。
确定系统的初始化有效
系统中的芯片以及器件从上电开始到正常工作的状态往往有一段时间,程序开始时延时一段时间,是让系统中所有器件到达正常工作状态。究竟延时多少才算合适?这取决于系统的各芯片中到达正常工作状态的时间,通常以最慢的为准。一般来说,EN8F154的延时20-100毫秒已经足够。对于系统中使用嵌入式MODEM等“慢热”型的器件来说,则应更长。当然,这都需要在系统实际运行中进行调整。
当然,仿真是单片机开发过程中非常重要的一个环节,除了一些极简单的任务,一般产品开发过程中都要进行仿真,仿真的主要目的是进行软件调试,当然借助仿真机,也能进行一些硬件排错。一块单片机应用电路板包括单片机部份及为达到使用目的而设计的应用电路,仿真就是利用仿真机来代替应用电路板(称目标机)的单片机部份,对应用电路部份进行测试、调试。仿真有CPU仿真和ROM仿真两种,所谓CPU仿真是指用仿真机代替目标机的CPU,由仿真机向目标机的应用电路部份供给各种信号、数据,进行调试的办法。
2. 单片机温度检测的程序
你用的是DS18B20?这个程序你参考下#include <reg52.h>
#include <stdio.h>
#define uchar unsigned char
#define uint unsigned int
sbit ds=P2^2; //温度传感器信号线
sbit la=P2^6; //数码管段选线
sbit wela=P2^7; //数码管位选线
sbit beep=P2^3; //蜂鸣器
sbit key1=P3^4;
sbit key2=P3^5;
sbit key3=P3^6;
sbit key4=P3^7;
uint temp;
float f_temp;
uint warn_l1=23;
uint warn_h1=29;
sbit led0=P1^0;
sbit led1=P1^1;
sbit led2=P1^2;
sbit led3=P1^3;
unsigned char code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0xbf,0x86,
0xdb,0xcf,0xe6,0xed,
0xfd,0x87,0xff,0xef}; //不带小数点的编码
void delay(uint z)//延时函数
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void dsreset(void) //18B20复位,初始化函数
{
uint i;
ds=0;
i=103;
while(i>0)i--;
ds=1;
i=4;
while(i>0)i--;
}
bit tempreadbit(void) //读1位函数
{
uint i;
bit dat;
ds=0;i++; //i++ 起延时作用
ds=1;i++;i++;
dat=ds;
i=8;while(i>0)i--;
return (dat);
}
uchar tempread(void) //读1个字节
{
uchar i,j,dat;
dat=0;
for(i=1;i<=8;i++)
{
j=tempreadbit();
dat=(j<<7)|(dat>>1); //读出的数据最低位在最前面,这样刚好一个字节在DAT里
}
return(dat);
}
void tempwritebyte(uchar dat) //向18B20写一个字节数据
{
uint i;
uchar j;
bit testb;
for(j=1;j<=8;j++)
{
testb=dat&0x01;
dat=dat>>1;
if(testb) //写 1
{
ds=0;
i++;i++;
ds=1;
i=8;while(i>0)i--;
}
else
{
ds=0; //写 0
i=8;while(i>0)i--;
ds=1;
i++;i++;
}
}
}
void tempchange(void) //DS18B20 开始获取温度并转换
{
dsreset();
delay(1);
tempwritebyte(0xcc); // 写跳过读ROM指令
tempwritebyte(0x44); // 写温度转换指令
}
uint get_temp() //读取寄存器中存储的温度数据
{
uchar a,b;
dsreset();
delay(1);
tempwritebyte(0xcc);
tempwritebyte(0xbe);
a=tempread(); //读低8位
b=tempread(); //读高8位
temp=b;
temp<<=8; //两个字节组合为1个字
temp=temp|a;
f_temp=temp*0.0625; //温度在寄存器中为12位 分辨率位0.0625°
temp=f_temp*10+0.5; //乘以10表示小数点后面只取1位,加0.5是四舍五入
f_temp=f_temp+0.05;
return temp; //temp是整型
}
////////////////////显示程序//////////////////////////
void display(uchar num,uchar dat)
{
uchar i;
la=0;
P0=table[dat];
la=1;
la=0;
wela=0;
i=0XFF;
i=i&(~((0X01)<<(num)));
P0=i;
wela=1;
wela=0;
delay(1);
}
void dis_temp(uint t)
{
uchar i;
i=t/100;
display(0,i);
i=t%100/10;
display(1,i+10);
i=t%100%10;
display(2,i);
}
//////////////////////////////////////////////
void warn(uint s,uchar led) //蜂鸣器报警声音 ,s控制音调
{
uchar i;i=s;
la=0;
wela=0;
// beep=0;
P1=~(led);
while(i--)
{
dis_temp(get_temp());
}
// beep=1;
P1=0XFF;
i=s;
while(i--)
{
dis_temp(get_temp());
}
}
void deal(uint t)
{
uchar i,k;
k=t/10;
if(k<warn_l1)
{
warn(40,0x01);
}
if(k>warn_h1)
{
warn(40,0x04);
}
else
{
i=40;
while(i--)
{
dis_temp(get_temp());
}
}
}
void xianshi(num)
{
uint m;
for(m=50;m>0;m--)
{
uchar shi,ge;
shi=num/10;
ge=num%10;
la=1;
P0=table[shi];
la=0;
P0=0xff;
wela=1;
P0=0xfe;
wela=0;
delay(10);
la=1;
P0=table[ge];
la=0;
P0=0xff;
wela=1;
P0=0xfd;
wela=0;
delay(10);
}
}
void anjian()
{
if(key1==0)
{
delay(10);
if(key1==0)
{
warn_l1++;
if(warn_l1==warn_h1)
warn_l1=23;
xianshi(warn_l1+1);
while(!key1);
}
}
if(key2==0)
{
delay(10);
if(key2==0)
{
warn_l1--;
if(warn_l1==0)
warn_l1=23;
xianshi(warn_l1+1);
while(!key2);
}
}
if(key3==0)
{
delay(10);
if(key3==0)
{
warn_h1++;
if(warn_h1==125)
warn_h1=29;
xianshi(warn_h1+1);
while(!key3);
}
}
if(key4==0)
{
delay(10);
if(key4==0)
{
warn_h1--;
if(warn_h1==warn_l1)
warn_h1=29;
xianshi(warn_h1+1);
while(!key4);
}
}
}
void main()
{
uchar buff[4],i;
la=0;
wela=0;
while(1)
{
tempchange();
anjian();
for(i=10;i>0;i--)
{
dis_temp(get_temp());
}
deal(temp);
sprintf(buff,"%f",f_temp);
for(i=10;i>0;i--)
{
dis_temp(get_temp());
}
for(i=10;i>0;i--)
{
dis_temp(get_temp());}
}
}
3. 单片机测试题
分开答吧,我答前几题。后面的朋友继续。
二,填空题( 共5题,每空1分)1. 复位时SP的值为_07H____,P1口的值为__0FFH_____。
2. MCS-51单片机存储器物理上分为__片内数据存储器_____、_片外数据存储器____、_片内程序存储器__和_片外程序存储器_。
3. 关于堆栈类操作的两条指令分别是_____入栈指令PUSH_________ 、___出栈指令POP_________。
4. MCS-51有五个中断源分别为_INT0____、__T0____、__INT1_____、__T1______、__串行通信口____。
5. MCS-51有两种存储器_数据存储器RAM____和_程序存储器ROM____。(此答案不确定)
三,简答计算题( 共4题,每题5分)
4. SP=27H PC=3456H
四, 读程序,写结果( 共5题,每题6分)
1.
执行后结果 A=33H B=23H
2.
(A)=24H
3.
6655H+11FFH结果送到(51H)(50H)
4. 执行下列程序段后,内部RAM中的30H、31H、DPTR 以及SP单元中的内容是什么?
(30H)=00H,(31H)=0FFH,(DPTR)=0100H,(SP)=60H
5. 求各有关单元的最终结果
CY=1,(41H)=07H,(40H)=54H
4. 单片机习题
《单片机习题与试题解析》是一部单片机教材的练习试题与解析,全书内容分两部分,第1部分对80C51系列单片机教材中所涉及的思考与练习题进行了整理、分析和解答;第2部分则对某大学近几年“单片机原理与接口技术”考试试卷进行了分析和解答,并说明考题测试的内容、答题时应注意的问题等。即使题目相同,由于提出问题的角度不同,答案还会有所不同。同时,增加了一些设计题、综合系统扩展题。书中对近几年单片机系统扩展应用的新技术和新理念(比如低功耗设计、可靠性设计和虚拟技术等)进行了适当补充。《单片机习题与试题解析》内容分两部分,第1部分对80C51系列单片机教材中所涉及的思考与练习题进行了整理、分析和解答;第2部分则对某大学近几年“单片机原理与接口技术”考试试卷进行了分析和解答,并说明考题测试的内容、答题时应注意的问题等。即使题目相同,由于提出问题的角度不同,答案还会有所不同。同时,增加了一些设计题、综合系统扩展题。书中对近几年单片机系统扩展应用的新技术和新理念(比如低功耗设计、可靠性设计和虚拟技术等)进行了适当补充。
5. 单片机怎么检测好坏
单片机一般很少坏,坏一般都是外围电路
6. 求解,单片机程序的单元测试应该怎么做呢
单片机测试程序需要分模块来测试,测试每个模块的寄存器初始状态,读写是否正常,并且测试完全功能。这些都可以通过代码来实现自动来测试,测试完成后给出测试结果。你可以到Freescale(飞思卡尔)的官网去需求技术支持,那里会提供标准的测试程序供你参考。
7. 求一份单片机答辩的题目和答案 我不是计算机专业的 简单点就行 拜托了
36个单片机新手入门问题:
1.C语言和汇编语言在各有哪些优缺点? 2.初学者到底是应该先学C还是汇编? 3.400减50,程序语句上如何SUBB实现呢?
4.C或汇编语言可以用于单片机,C++能吗? 5.学了电子线路、C语言,感觉很迷茫怎么办? 6.8位机还能延续多久?
7.搞单片机开发,一定要会C吗? 8.请问作为学生,如何学好单片机? 9.单片机的生命期还有多长?
10.当开发项目时,用C还是用汇编开发好? 11.如何才能才为单片机的高手啊? 12.符合44PIN的80系列8位单片机的MCU有哪些?
13.请问那里可以找到关于这方面的书或资料? 14.女性是否适合单片机软件编程这个行业? 15.从51转到ARM会有困难吗?
16.利用单片机来检测手机电池的充放电时间? 17.商业级芯片和工业及芯片区别? 18.低辐射MCU方法可以减少,有什么别的方法?
19.96单片机开发系统时,有那些注意事项? 20.在demo板上采样电压,不稳定,如何消除? 21.在车载DVD系统中,如何设计电子防震系统?
22.电子防震技术中,那些IC或器件可供选择? 23.如何进行编程可以减少程序的bug? 24.有没有解决加密问题又不破坏MCU的方法?
25.如何使生成的代码具有和汇编一样的效率? 26.ARM单片机和哪种内核的单片机比较接近? 27.测试中如何用一些比较短的时间来工作?
28.怎样学51系列和cygnal系列单片机? 29.MCU的C汇编优化,有没有通用的原则? 30.估计一个算法的MIPS,有什么好的途径?
31.AT89S51,复位RAM中数据被修改怎么回事? 32.如何正确的使用IO功能? 33.频率100kHz,atiny15那样怎么办?
34.单片机应注重哪几个方面的学习? 35.汽车电子用的单片机是8位多,还是32位? 36.复用技术的使用在实际应用?
单片机开发与测试中的若干问题:
1.Delta-Sigma软件测量方式,是什么概念? 2.要同时用到3个counter,该怎么办? 3.有那些是衡量系统的稳定性的标准?
4.芯片封装及设计过程中需要注意哪些问题? 5.抗干扰技术对软件的可靠性怀疑。怎么办? 6.12M的晶振,如何实现480MB/S数据传输率呢?
7.当今世界单片机的应用与发展有什么不同? 8.在中国,单片机在哪方面有较好的前景? 9.高性能要求选用32位单片机这样认为对吗?
10.51系统过渡到ARM系统,要注意哪些事情? 11.能否用PSoC嵌入式代替部分单片机系统呢? 12.如何理解如下概念?
13.选用什么型号的仿真器和编程器比较好? 14.C语言是否有关于位操作地址的指令 15.运行以后看到从R0到R7都被占用,为什么?
16.发电机系统,如何设计复位电路? 17.PWM做到100kHz(8bit上)的方法有哪些? 18.医疗电子应用的最多是几位单片机?
19.单片机对modem要进行哪些初始化操作? 20.各种各样的输入怎么样与MCU进行通讯? 21.两个串口、16KEPROM、512个字节的RAM?
22.在嵌入式开发中软件抗干扰有哪些问题? 23.语音识别会不会是单片机下个消费热点? 24.如何设计实现低成本测量电池组电压的装置?
25.调用函数会不会影响定时/计数器的中断? 26.LM4915是什么IC? 27.被嵌套高优先级中断程序怎样返回主程序?
28.介绍单片机系统的故障自诊断的知识? 29.如何使照的相片可存储,看的时候可调用? 30.将Wafer切割成Die后对单个Die进行?
31.测试整个MCU的功能是否正确? 32.如何测试程序达到较高的测试覆盖度? 33.MCU逻辑电路是测试合格的,如何解决呢?
34.cpu一直工作在复位状态,会不会有问题? 35.单片机系统的故障相关问题如何解决?
holtek单片机常见问题汇总:
1.Holtek的数据手册在哪里下载? 2.学单片机缺乏实践经验请问该怎么办? 3.A/D,D/A的采样速率有什么优势?
4.学习ARM是否比学习单片机更有使用前景? 5.遥控的编解码思路和设计流程是怎样的? 6.Holtek的编程语句是否就是C51或是相关?
7.介绍一下MCU的测试方法。 8.如何理解预分频,12时钟模式等概念? 9.请推荐配套的编译仿真烧录的硬软件?
10.在ARM编程中又应当如何? 11.采用什么方法来测试单片机系统的可靠性? 12.Holtek如何解决测试问题?
13.如何使PIC16F87X宽温度内误差尽量小呢? 14.如何适当的喂狗,判定软体的运行时间? 15.RISC架构的单片机它的主要特点是什么?
16.RISC和CISC内核的MCU,代码量哪个更大? 17.单片机的I/O口何种状态能获得最低功耗? 18.Holtek和AT系列编程有何不同?
19.Holtek和AT系列有FLASH可电擦写的型号? 20.Holtek的单片机能符合该项应用要求吗? 21.WATCHDOG功能的单片机,如何确认其起作用?
22.能否推荐一个DSP或现在的高速单片机? 24.HT48系列单片机支持串行通信吗? 24.返回指令能用跳转指令替代到主程序中?
8051单片机设计教程与实例---指令基础教程
1.什么是嵌入式系统? 2.单片机的技术发展历史 3.单片机应用模式
4.单片机的开发过程 5.单片机基本结构与工作原理 6.单片机内部资源的配置
7.单片机的外部特性 8.80C51的SFR运行管理模式 9.单片机I/O端口及应用特性
10.80C51单片机存储器系统及操作方式 11.单片机的指令系统 12.指令系统的分类与速解
13.指令的应用例子 14.定时器/计数器的基本结构与操作方式 15.定时器/计数器的SFR
16.定时器/计数器的工作方式 17.定时器/计数器的编程和使用 18.定时器应用举例
19.中断系统的基本组成 20.中断系统中的SFR 21.中断响应的自主操作过程
22.串行口的基本结构与操作方式 23.串行口的特殊功能寄存器 24.串口的工作方式
25.汇编语言应用程序设计的一般格式 26.汇编语言程序的设计方法 27.常用的伪指令
28.简单结构程序 29.分支结构程序 30.循环结构程序
31.子程序结构程序 32.查表程序 33.查键程序
8051单片机设计教程与实例---实战程序设计
1.显示程序 2. 闪烁LED小灯的设计 3.闪烁LED控制程序
4.闪烁LED小灯主程序图 5.数码管时钟电路的设计 6.8*8点阵LED字符显示器的设计
7.数码管时钟电路的主程序 8.8路输入模拟信号数值显示电路的设计 9.8路输入模拟信号数值显示电路程序
10.单键学习型遥控器的设计 11.单键学习型遥控器的程序 12.电路主要性能指标
13.15路电器遥控器的设计 14.系统的功能实现方法 15.遥控发射及接收控制程序流程图
16.自行车里程/速度计的设计 17.系统内存的规划 18.系统内存设计的程序
19.自动往返行驶小汽车的设计 20.系统内存资源的分配 21.系统内存资源的程序
22.遥控小汽车的设计 23.发射板控制程序的设计 24.汽车行驶信息发送与接收器的设计
25.数据帧的编码格式及发送/接收过程 26.汽车行驶信息发送与接收器的程序 27.系统调试中的问题及解决方法
28.数控调频发射台的设计 29.内存单元的使用要求 30.W78E516B的功能特点
31.W78E516B中的几个特殊寄存器 32.W78E516B在线编程的规则 33.W78E516B在线编程的硬件电路
34.W78E516B应用系统的程序设计 35.电子定时器的设计 36.电子定时器的程序
37.电子定时器的程序流程图
单片机相关资料
(1)单片机的图形化编程方法探讨 (2)单片机应用编程技巧 (3)单片机自身的抗干扰若干措施
(4)单片机编音乐程序 (5)用89C51做直流稳压电源 (6)王款主流CMMB调谐器的特性比较
(7)红外遥控器控制的风扇温控器 (8)用单片机89S52制作计算器 (9)用单片机89C51制作程控交换机
(10)数据采集和记录系统单片机AT89C51 (11)简单的制作AT89SXX的单片机教程板 (12)热敏电阻温度计:液晶版
(14)热敏电阻温度计 (15)使用DS1307的数字闹钟 (16)SPI闪存编程器的制作
(17)8051SBC单片机微处理器学习板 (18)Atmel 89系列编程器的制作 (19)ISP微控制器编程
(20)制作简单的S51学习板 (21)89S52单片机开发板 (22)keil 与protues安装的详细步骤和说明
详见:http://www.51c51.com/JIAOXUE4.HTM