51单片机内部包含的功能组件及作用主要有:
1、cpu主芯片(内部通过总线连接扩展的设备)
2、时钟电路(为单片机提供震荡脉冲)
3、电源电路(为单片机提供电源)
4、内部数据存储器RAM(包括通用数据寄存器和专用寄存器SFR,主要是数据存储区。)
5、程序存储器ROM(主要是存储程序,51系列有4K内部程序ROM,可以外扩64K。)
6、并行端口4*8位(P0,P1,P2,P3主要是数据交换接口。)
7、串行口(TXD,RXD用于串口通信。)
8、中断系统(外中断0,定时计数T0,外中断1,定时计数T1,串口中断。)
9、定时/计数器(16位用于外部的计数和定时功能。)
扩展资料
Proteus 自从有了单片机也就有了开发系统,随着单片机的发展开发系统也在不断发展。 keil是一种先进的单片机集成开发系统。它代表着汇编语言单片机开发系统的最新发展,首创多项便利技术,将开发的编程、仿真、调试、写入、加密等所有过程一气呵成,中间不须任何编译或汇编。
功能特性
1、可以仿真63K程序空间,接近64K 的16位地址空间。
2、可以仿真64Kxdata 空间,全部64K 的16位地址空间。
3、可以真实仿真全部32 条IO脚。
4、完全兼容keilC51 UV2 调试环境,可以通过UV2 环境进行单步,断点, 全速等 *** 作。
5、可以使用C51语言或者ASM汇编语言进行调试。
6、可以非常方便地进行所有变量观察,包括鼠标取值观察,即鼠标放在某 变量上就会立即显示出它此的值。
7、可选 使用用户晶振,支持0-40MHZ晶振频率。
8、片上带有768字节的xdata,您可以在仿真时选 使用他们,进行xdata 的仿真。
9、可以仿真双DPTR 指针。
10、可以仿真去除ALE 信号输出。
11、自适应300-38400bps 的所有波特率通讯。
12、体积非常细小,非常方便插入到用户板中.插入时紧贴用户板,没有连接电缆,这样可以有效地减少运行中的干扰,避免仿真时出现莫名其妙的故障。
13、仿真插针采用优质镀金插针,可以有效地防止日久生锈,选择优质园脚IC插座,保护仿真插针,同时不会损坏目标板上的插座. 。
14、仿真时监控和用户代码分离,不可能产生不能仿真的软故障。
15、RS-232接口不计成本采用MAX202集成电路,串行通讯稳定可靠,绝非一般三极管的简易电路可比。
参考资料百度百科--51单片机
这个应该根据程序的情况来定,你只有一个源文件的话,当然写在C里就可以了。全局变量一般写在程序的最前面,局部变量写在每个函数里。比如这个例子:#include <stdio.h>
#include <math.h>
#include <intrins.h>
#include <absacc.h>
#include <string.h>
#include "LCD_12864.h"
sbit RESET = P3^3
uchar code LCD_WIDTH = 16
uchar code LCD_HEIGHT = 64
uchar gCurRow,gCurCol
uchar tCurRow,tCurCol
uchar ShowModeSW
uint txthome,grhome
uchar Status_BIT_01()
uchar Status_BIT_3()
uchar LCD_Write_Command(uchar cmd)
uchar LCD_Write_Command_P1(uchar cmd,uchar para1)
uchar LCD_Write_Command_P2(uchar cmd,uchar para1,uchar para2)
uchar LCD_Write_Data(uchar dat)
void cls()
uchar LCD_Initialise()
void Set_LCD_POS(uchar row,uchar col)
uchar Status_BIT_01()
{
uchar i
for(i=5i>0i--)
{
if((LCMCW &0x03)==0x03)
break
}
return i
}
uchar Status_BIT_3()
{
uchar i
for(i=5i>0i--)
{
单片机中通过中断的方式来调用定时器。具体的调用方式可以参考通过如下程序:
程序功能:利用定时器进行定时,实现每秒中led闪烁一次
#include<reg52.h>
sbit led = P0^0
unsigned int num
void main(void)
{
TMOD = 0x00 // 工作方式0
TH0 = (8192 - 5000) / 32 // 12M晶振下定时5ms
TL0 = (8192 - 5000) % 32
EA = 1 // 开总中断
ET0 = 1 // 开定时器中断
TR0 = 1 // 启动定时器
while(1)
{
if(num == 200) // 定时1秒钟到
{
num = 0 // 计数器清零
led = ~led // led灯取反,实现1秒闪烁一次
}
}
}
void timer() interrupt 1 // 定时器1工作与方式0
{
TH0 = (8192 - 5000) / 32 // 重装初值
TL0 = (8192 - 5000) % 32
num++ // 计数器加1
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)