第一篇:msp单片机编程常用语段
/*延时函数*/
#define CPU_F((double)8000000)
#define delay_us(x)__delay_cycles((long)(CPU_F*(double)x/1000000.0))#define delay_ms(x)__delay_cycles((long)(CPU_F*(double)x/1000.0))
/*时钟初始化函数*/
void Clk_Init()
{
unsigned char i;
BCSCTL1&=~XT2OFF;//打开XT振荡器
do
{
IFG1 &= ~OFIFG;//清除振荡错误标志
for(i = 0;i < 0xff;i++)_NOP();//延时等待
}
while((IFG1 & OFIFG)!= 0);//如果标志为1继续循环等待
IFG1&=~OFIFG;
BCSCTL2|=SELM_2+SELS;//MCLK 8M and SMCLK 8M
}
/*IO口关闭函数*/
void Close_IO(void)
{
P1DIR=0XFF,P1OUT=0XFF;
P2DIR=0XFF,P2OUT=0XFF;
P3DIR=0XFF,P3OUT=0XFF;
P4DIR=0XFF,P4OUT=0XFF;
P5DIR=0XFF,P5OUT=0XFF;
P6DIR=0XFF,P6OUT=0XFF;
}
/*关闭看门狗*/
WDTCTL = WDTPW + WDTHOLD;
第二篇:C语言对单片机编程的学习心得
很多朋友都在学习单片机或是想学单片机,但在看了一些资料后,要么感到不知道学的什么,要么找不到下一步的学习方法,这都很正常,因为单片机的学习是一项综全性知识的结果。那么怎样学习单片机,怎么样学好单片机是我们关心的,通过我本人的学习过程,我总结了几条,是单片机学习都要具备的几个条件:
1.首先要明确一点,你是爱好单片机编程的,通过写出各种各样的程序,你可以从中得到快乐和成就感,这一点非常重要,如果你是因为学好单片机可以走上更好的工作岗位得到更好的报酬,那也可以,必竞有个动力所以可以驱使你好好的学。
2.要具备能吃苦的精神,学习单片机初期是十分枯燥无味的(在你能写出自已的程序前这一段时间),你会被状态控制字、中断地址、中断优先级等等问题所困惑,可能有些问题要好多天,查了很多资料,想的头疼后你才能彻底想明白。没有吃苦的精神是不行的。所以这一点也很重要。
3.要具备一些数字电路和模拟电路知识,这些虽然看起来和单片机关系不大,实际上哪个单片机没有外围电路,没有这些知识你学会单片机编程后,能力也会被大大的限制。
4.虽然现在工作中用单片机编程都用的C语言编程,因为C语言有代码编写程序速度快,逻辑比较清晰,可维护性强。但是汇编语言对初学者来说也十分重要,这有助于你了解单片机内部运行机制,对单片机的执行过程更加了解。听朋友这么说过,当一个工程师做单片机程序从汇编转到C时,他的水平就提高了,但当他从C又转回汇编时那么他就成精了。
5.要边学边练习,光看书还是不行的,要把你在学习过程中的编程思路在单片机上跑起来,你才会更能找到编写单片机程序的感觉。如果不把自已的编程思路在单片机上运行起来,那么后面你就不知道自已的想法是对是错,感觉无法继续下去。如果经济条件允许一块开发板还是必须的,理论和动手相经结合,你的单片机水平会提高的很快。
6.多想多练,做一些实际的项目,你可以根据你现有的开发板硬件条件,做出一些你感觉比较有意思的项目,实际动手做过项目和看过别人的项目还是有差别的。自已做过项目以后在工作或求职中就没有那么被动,也会有信心一点。
祝个位学习单片机的朋友早日提高!以上是个人见解有不同意见请提出来供广大单片机爱好参考。
创易电子搜集,全部资料来源于互联网开源资料,如有侵权,请及时与楼主联系立刻纠正。
第三篇:单片机编程心得
一、延时程序的处理:
1、对于可以设置系统时钟的单片机,延时程序统一先把系统时钟设频率置为最低,然后按这个最低时钟频率写延时
函数,这样的好处:第一,统一了不同系统时钟下的延时;第二,降低功耗
2、对于单片机系统,不同的外部时钟,延时程序对应的时间不同,为了方便使用,加入预编译指令#ifdef/#else/
#endif这样如果预定义了一个系统时钟,则选择相应的延时参数进行编译,而延时程序主体不变,只是里面有
一个延时参数,根据预定义选择相应参数。
二、for循环的处理:
用for(i=XX,i>0,i--)而不用for(i=0;i 对于两层或多层for循环,频繁的循环放在内层,减少循环间跳转花费的时间 三、对外设的操作:可以把外设作为一个文件来操作,比如液晶,就可以把液晶看作一个文件,往液晶打印字符串或 者数据,就可以用fprintf()来做,(51的C标准库不支持,但是可以自己写一个文件操作的库)。只要是输入输出 设备,都试着用文件操作的方法去操作。 四、标准库函数的使用: 1、标准输入输出库(stdio.h): 字符串夹杂变量数字(比如:发送完nihao字符串,然后发送变量i的值)往液晶显示或往串口发送的时候,往串口发 送可以使用格式输出函数printf(“nihao%d”,i);但是往LCD显示就不好做了,通常是写一个数字转字符串的函数,然 后先送原来的字符串,再送数字转换后的字符串,太麻烦,可以使用标准输入输出库里的sprintf()函数来完成,它的原型为:sprintf(char *buffer, const char *format, …),*buffer是要把字符串和变量写入的缓冲区,可以使 用数组或者指针,后面的格式和printf()函数一样;与之对应的还有sscanf()函数,从缓冲区读一个字符串把它 转成相应的类型后赋给指定的变量。 比如: #include void PrintToLcd(unsigned char *str) { ...} void main() { unsigned char *p; unsigned char i = 50; sprintf(p,“nihao%d”,i); PrintToLcd(p); } 2、字符串库(string.h) 字符串连接(相加)char *strcat(char *dest,const char *stc) 把src连接到dest字符串后面,返回指向dest的指针 字符串比较int strcmp(char *str1,char *str2) 返回值:小于0: str1 字符串拷贝1char *strcpy(char *dest,const char *src) 结果把src的内容拷进dest,两个字符串内容相同,返回指向dest的指针字符串拷贝2char *strdup(const char *src) src:待拷贝的源字符串,返回值:指向拷贝后的字符串的指针 字符串倒序char *strrev(char *s); 返回指向倒序后字符串的指针 3、类型转换(math.h;stdlib.h) 字符串转双精度(类似C++Builder里的StrToDouble)double atof(char *str)字符串转整数(类似StrToInt)int atoi(char *str) 字符串转长整型long atol(char *str) 浮点数转字符串char *ecvt(double value,int ndigit,int*dec,int *sign)char *fcvt(double value,int ndigit,int*dec,int *sign) 输入参数:value: 待转换浮点数,ndigit: 转换后的字符串长度 输出参数:dec: 小数点位置,sign: 符号 返回转换后的字符串指针 整型转字符串char *itoa(int value,char *string,int radix) 输入参数:value: 要转换的数,radix: 转换的进制 输出参数:string: 转换后的字符串 返回指向string的指针 长整型转字符串char *ltoa(long value,char *string,int radix) 设计题目:漂亮的LED灯闪设计 设计内容: 在现在诸多的娱乐场所、理发店、宾馆、饭店、公司等的门外,都可以看到各式各样的广告流水灯。所谓“广告流水灯”,就是将一系列的有颜色的广告灯串联接在一起,然后令这些灯按一定的次序逐个或者几个的一次点亮和熄灭。由于各灯点亮和熄灭,产生的效果就像流动的水一样,因此,就称这类广告灯为“广告流水灯”。生活中广告流水灯的形式和点亮的次序是多种多样的。有单一颜色的几个灯按固定的次序来点亮的,有多个不同颜色的灯构成某一图案依次点亮的,也有多排广告灯按多种组合好的次序循环点亮的等。我们设计的广告流水灯,就是这些广告灯中的类型。基本效果就是有流水灯,跑马灯,间隔闪烁,让任意灯闪的的花样灯闪效果。 硬件原理图是我们在altium desiigner 6.9中设计出来的,具体原理图如下 : 原理图中,左上角为单片机的晶振,左下角为单片机的复位电路,下面这个是单片机的电源模块,与单片机一起,组成了单片机的最小系统。右边接的是功能需要的LED小灯。 具体来说,单片机复位电路要求有一个持续时间,加上电容可以利用其两端电压不能突变的特性,使复位电平维持一定时间,使单片机复位。单片机复位电平在其手册里可以看到。另外这个电容还可以去除一些杂波的干扰,防止单片机被错误复位 就常用的51,复位电平的要求如下: 当单片机的复位引脚出现2个机器周期以上的高电平时,单片机就执行复位操作。如果RST持续为高电平,单片机就处于循 环复位状态,所以复位引脚的电容大一点没多大关系,顶多是复位时间长一点;但如果电容太小,高电平持续时间太短,则单片机无法正常复位,就不能工作 电容通常取 10UF 或 22UF,铝电解电容即可 XTAL1(19脚)接外部晶体的一个引脚。在单片机内部,它是一个反相放大器的输入端,这个放大器构成了片内振荡器。当采用外部振荡器时,对HMOS单片机,此引脚应接地;对CHMOS单片机,此引脚作为驱动端。 XTAL2(18脚)接外晶体的另一端。在单片机内部,接至上述振荡器的反相放大器的输出端。采用外部振荡器时,对HMOS单片机,该引脚接外部振荡器的信号,即把外部振荡器的信号直接接到内部时钟发生器的输入端;对XHMOS,此引脚应悬浮。 将51单片机第40脚Vcc接电源+5V,第20脚Vss接地,为单片机工作提供能源;再将19脚XTAL1与18脚XTAL2分别接外部晶体两个引脚,由石英晶体组成震荡器,保证单片机内部各部分有序地工作。软件设计这部分 很简单,下面附上源程序: ORG 00H SJMP START START: ORG 30H LOOP: LCALL DELAY MOV P1,#0AAH LCALL DELAY LCALL DELAY MOV P1,#55H LCALL DELAY MOV P1,#0F0H LCALL DELAY MOV P1,#0FH LCALL DELAY MOV P1,#0FFH LCALL DELAY LCALL DELAY MOV P1,#00H LCALL DELAY LCALL DELAY LJMP LOOP DELAY:MOV R7,#50 ;延时0.5秒需要更长的话多加几个LCALL DELAY D1: MOV R6,#250 D2:NOP NOP NOP NOP NOP NOP DJNZ R6,D2 DJNZ R7,D1 RET END 结论:实现了漂亮的LED灯闪 通过这次的课程设计,让我们受益匪浅,也让我了解和掌握了一些编程思想和对I/O口的使用和应用的条件的思考,对单片机的各个管脚功能的理解和掌握。实现了软件和硬件的有效结合,缺一不可。设计让我把单片机的理论知识用在实践中,实现了理论和实践相结合,从中更懂得理论的是实践的基础,实践有能检验理论的正确性,更激发了我对专业知识的渴求,这些对我以后参加工作或者继续学习都会有很大的帮助和影响。 仲恺农业工程学院实验报告纸 信息学院(院、系)专业班组单片机原理及接口技术课实验三单片机串行口编程 一、实验目的1、掌握单片机串行口的工作方式; 2、掌握单片机串行口的编程方法。 二、实验内容 1、学习单片机串行口的工作方式、初始化以及应用等; 2、利用单片机串行口编写程序在超级终端输出输入相应信息并根据输入的信息驱动开发板上的蜂鸣器按一定规律工作。 三、实验设备 1、STC单片机开发板; 2、PC机以及串口线。 四、实验步骤 参考实验指导书。 五、实验总结第四篇:单片机编程实习报告(河南农业大学)
第五篇:实验三 单片机串行口编程(最终版)