发一篇在大学写的PPT(关于电子制作总结)
在学校算得上是受保护的对象之一了,全校只有3个工科专业,而我也很有幸,在师范大学读工科经常这样调侃自己。在学校从来都是上课做实验,没什么人去搞电子方面的研究,这可能就是由于工科太少氛围太差的缘故了。
个人很喜欢搞搞电子,也是一个人买了开发板子在一旁敲代码调程序,从51到PIC、AVR、Cortex-M3
一路走来很辛苦,都是因为寂寞。一个人搞这些东西有时候很乏味,别人也很不理解你,学院有个电子协会,大家都调侃道那是焊接协会
第一次发帖,主要就是想感谢一下ouravr一直在陪伴我成长。正好上次老师让我给低年级的同学做一个讲座,准备了以份入门级别的PPT,上传上来给刚刚入门
的同学。
PPT全篇ourdev_563773VA598H.rar(文件大小:2.52M) (原文件名:经验交流.rar) EasyHW OS 简单介绍:
全名:Easy HardWare Operation System
作者:Lyzhangxiang
完成时间:2010年3月29日
学习单位:安徽师范大学07电子信息工程
功能介绍:
基于EasyHW OS可以使51系列单片机的程序开发变得简单,OS原意Operation System这里只是取其为名,并不是说这个一个基于51的操作系统。众所周知像AT89C51这样的单片机是不适合使用操作系统的.可以说EasyHW OS是一个包装好了的程序集,你可以很轻松的使用各种函数进行系统开发。这个想法是源于我对意法半导体(STM32F103xx)驱动库程序开发的体会,8位机到32位机本质没有改变只是32位机的芯片资源更加丰富寄存器数目更多了。意法半导体采用全新的驱动库开发方式使使用者的开发变得轻松那么为何我们不对8位的也做一下优化呢。对于8位机而言资源很少但是如果将外围扩展也一并添加到驱动库之中那岂不是很让人心动。经过不断尝试终于开发出一套适用于8位机的EasyHW OS本着抛砖引玉的意愿将其开源,程序中也有部分代码是参考互联网上的资源。有什么问题请联系:lyzhangxiang点love@163.com!
EasyHW OS构架如下:
1、BSP——Board Support Package板载支持包
提供你使用的板载资源信息
2、Hw Lib
驱动库包括外围扩展
3、MDK
Keil的OBj和List文件
4、Startup
芯片启动代码
5、User
使用者构建的Main、Includes和Interrupt 谢谢,写的很好,受用。 第一次 发帖沉了 。。。。 鼓励一下,现在这样的大学生很少了 不错,支持一下 谢谢 支持 /******************************************************************
本OS只供学习使用,未经作者许可,不得用于其它任何用途
欢迎访问我的Blog:http://hi.baidu.com/lyzhnagxiang
Chip Source.cfile
作者:Lyzhangxiang
建立日期: 2010.05.08
版本:V1.0
Copyright(C) 安徽师范大学Lyzhangxiang
*******************************************************************/
#include "REG51.H"
#defineTL_Value 0xFF
#defineTH_Value 0xFF
//每个指令的振荡周期数(4,6,12),注意,这里一定要仔细查看芯片手册
//*12 - 早期的8051、8052及当前的绝大部分51单片机
//*6 - Philips 的芯片
//*4 - Dallas
#define OSC_PER_INST (12)
//TIME 为定时时间 单位MS
#define PRELOAD1MS (65536 - 1*(UINT16)(Flck/(OSC_PER_INST*1000)))
#define PRELOAD5MS (65536 - 5*(UINT16)(Flck/(OSC_PER_INST*1000)))
/**************************Timer定时计数器*************************/
void Timer_init(void)
{
//TCON //"定时器控制寄存器"
//TF1 = 1; //"T1溢出标志"
//TR1 = 1; //"T1运行控制"
//TF0 = 1; //"T0溢出标志"
//TR0 = 1; //"T0运行控制"
//IE1 = 1; //"外部中断1申请标志"
//IT1 = 1; //"外部中断1触发方式 0=电平 1=边沿"
//IE0 = 1; //"外部中断0申请标志"
//IT0 = 1; //"外部中断0触发方式 0=电平 1=边沿"
//TMOD //"工作方式控制寄存器"
//定时器/计数器1
//GATA = 1; //"由外部中断请求信号(INT0或INT1)和TR的组合状态启动定时器"
//GATA = 0; //"由运行控制位TR启动定时器"
// C/T = 0; //"定时器工作方式"
// C/T = 0; //"计数器工作方式"
//M1M0 = 00; //"选择方式0 13位定时器/计数器工作方式"
//M1M0 = 01; //"选择方式1 16位定时器/计数器工作方式"
//M1M0 = 10; //"选择方式2 常数自动装入的8位定时器/计数器工作方式"
//M1M0 = 11; //"选择方式3 T1停止"
//定时器/计数器0
//GATA = 1; //"由外部中断请求信号(INT0或INT1)和TR的组合状态启动定时器"
//GATA = 0; //"由运行控制位TR启动定时器"
// C/T = 0; //"定时器工作方式"
// C/T = 0; //"计数器工作方式"
//M1M0 = 00; //"选择方式0 13位定时器/计数器工作方式"
//M1M0 = 01; //"选择方式1 16位定时器/计数器工作方式"
//M1M0 = 10; //"选择方式2 常数自动装入的8位定时器/计数器工作方式"
//M1M0 = 11; //"选择方式3 为两个8位定时器/计数器工程方式"
}
/**************************Uart串行通行****************************/
void Uart_init(void)
{
//SCON //"串行控制寄存器"
//SM0SM1 = 00; //"方式0 同步移位寄存器方式 Fclk/12"
//SM0SM1 = 01; //"方式1 8位Uart 定时器T1溢出率/n"
//SM0SM1 = 10; //"方式2 9位Uart 当SMOD=1时Fclk/32或当SMOD=0时Fclk/64"
//SM0SM1 = 11; //"方式3 9位Uart 定时器T1溢出率/n"
//关于定时器T1溢出率的注释:一般采用T1的方式2TH1=256-Flck/(波特率*12*32/2^SMOD)
//PCON //"电源控制寄存器"
//SMOD=1 //"串行口波特率加倍,其余位未定义"
}
/****************************Delay软件延时******************************/
void Delay_ms(unsigned char k)
{
int i,j;
for(i=0;i<k;i++)
{
for(j=0;j<121;j++);
}
}
//当K=1时延时1ms
void delay_ms(unsigned char a)
{
int i;
unsigned char i;
while(a-- !=0)
{
for(i=0;i<125;i++);
}
}
//当a=1时延时1ms
void delay_50us(uint t)
{
uchar j;
for(;t>0;t--)
for(j=19;j>0;j--);
}
//t取值20
/***********************Delay硬件延时(定时器)****************************/
void timer0_int(void) interrupt 1
{
TH0=TH_Value;
TL0=TL_Value;
while(TF0!=1);
{
TF0=0;
//添加相应的延时处理程序
}
}
/****************************定时器硬件延时******************************/
void start_Timeout1ms()
{
TH0 = PRELOAD1MS / 256;
TL0 = PRELOAD1MS % 256;
TF0 = 0 ;//清溢出标志位
ET0 = 0; //关定时器0的中断
TR0 = 1; //启动定时器
}
void start_Timeout5ms()
{
//TMOD = ;
TH0 = PRELOAD5MS / 256;
TL0 = PRELOAD5MS % 256;
TF0 = 0 ;//清溢出标志位
ET0 = 0; //关定时器0的中断
TR0 = 1; //启动定时器
}
void stop_Timeout()
{
TR0 = 0;
}
void Delay5ms()
{
start_Timeout5ms();
while(!_testbit_(TF0)); //等待T0超时
stop_Timeout();
}
void Delay1ms()
{
start_Timeout1ms();
while(!TF0); //等待T0超时
stop_Timeout();
} /******************************************************************
本OS只供学习使用,未经作者许可,不得用于其它任何用途
欢迎访问我的Blog:http://hi.baidu.com/lyzhnagxiang
Interrupt.Cfile
作者:Lyzhangxiang
建立日期: 2010.05.08
版本:V1.0
Copyright(C) 安徽师范大学Lyzhangxiang
*******************************************************************/
Void Interrupt_init(void)
{
//IE //"中断允许控制寄存器"
//EA = 1; //"CPU开放中断"
//EA = 0; //"CPU屏蔽所有中断"
//ES = 1; //"使能串行口中断"
//ES = 0; //"禁止串行口中断"
//ET1 = 1; //"使能定时器/计数器1中断"
//ET1 = 0; //"禁止定时器/计数器1中断"
//EX1 = 1; //"使能外部中断1中断"
//EX1 = 0; //"禁止外部中断1中断"
//ET0 = 1; //"使能定时器/计数器0中断"
//ET0 = 0; //"禁止定时器/计数器0中断"
//EX0 = 1; //"使能外部中断0中断"
//EX0 = 0; //"禁止外部中断0中断
}
/************************外部中断0服务程序**************************/
Void INT0ISR(void)interrupt 0
{
}
/************************Timer0中断服务程序*************************/
Void Timer0ISR(void)interrupt 1
{
}
/************************外部中断1服务程序**************************/
Void INT1ISR(void)interrupt 2
{
}
/************************Timer1中断服务程序**************************/
Void Timer1ISR(void)interrupt 3
{
}
/************************Uart中断服务程序****************************/
void UartISR(void) interrupt 4
{
if(RI) //收到数据
{
RI=0; //清中断请求
}
else //发送完一字节数据
{
TI=0;
Sending=0;//清正在发送标志
}
}
/************************** 中断号说明*******************************/
// 外部中断0中断 0 //
// 定时/计数器0中断 1 //
// 外部中断1中断 2 //
// 定时/计数器1中断 3 //
// 串行口中断 4 //
/********************************************************************/ 蛮好。 谢谢分享! 其实程序神生成器就是个lib
今天专盯PPT 顶 顶下, 顶下 谢谢分享!! xiexie 好帖,得看看! 你好,能否发一份OS源码我参考下,谢谢。很喜欢这种规范风格的代码。在么?
页:
[1]