使用Keil语言的嵌入式C编程教程(下)

用8051单片机进行定时器/计数器的计算与编程

延迟是应用软件开发中的重要因素之一。然而,在实现定时延迟的过程中,正常的延迟并不能给出克服这一问题的宝贵结果。定时器和计数器是微控制器的硬件组成部分,在许多应用中使用它来提供具有计数的宝贵时间延迟脉冲两个任务都是通过软件技术实现的。

定时器延迟

WAP使用T1M2(timer1和mode2)生成500us延时?

#include<reg51.h>

void main()

{

unsigned char i;

TMOD=0x20; //set the timer mode//

for(i=0i<2;i++) //double the time daly//

{

TL1=0x19; //set the time delay//

TH1=0x00;

TR1=1; //timer oN//

While(TF1==0); //check the flag bit//

TF1=0;

}

TR1=0; //timer off//

}

Normal Loop Delay

void delay()

{

unsignedint k;

for(k=0;k<30000;k++);

}

基于8051单片机的串行通信计算与编程

串行通信通常用于发送和接收信号。8051微控制器包括由Rx和Tx引脚发送和接收的信号的UART串行通信。UART接收字节的数据并按顺序发送各个位。寄存器是一种在存储器中收集和存储数据的方法。UART是一种半双工协议。半双工是指传输和接收数据,但不能同时进行。

1. WAP将字符“S”传输到串行窗口使用9600作为波特率?

28800是8051微控制器的最大波特率

28800/9600=
3

That baud rate ‘3’ is stored in the timers

#include<reg51.h>

void main()

{

SCON=0x50; //start the serial communication//

TNOD=0x20; //selected the timer mode//

TH1=3; // load the baud rate//

TR1=1; //Timer ON//

SBUF=’S’; //store the character in the register//

while(TI==0); //check the interrupt register//

TI=0;

TR1=0; //OFF the timer//

while(1); //continuous loop//

}

2. WAP从超级终端接收数据并使用9600波特将数据发送到微控制器的端口0?

28800是8051微控制器的最大波特率

28800/9600=
3

That baud rate ‘3’ is stored in the timers

#include<reg51.h>

void main()

{

SCON=0x50; //start the serial communication//

TMOD=0x20; //selected the timer mode//

TH1=3; // load the baud rate//

TR1=1; //Timer ON//

PORT0=SBUF; //send the data from SBUF to port0//

while(RI==0); //check the interrupt register//

RI=0;

TR1=0; //OFF the timer//

while(1); //stop the program when character is received//

}

用8051单片机中断程序

中断是强制停止当前程序并立即执行其他程序的信号。8051微控制器提供6个内部和外部中断源。当中断发生时,微控制器暂停当前任务并通过执行ISR处理中断,然后微控制器返回到最近的任务。

WAP在定时器0中断时执行左移操作,然后在主功能中执行P0的中断操作?

#include<reg51.h>

unsigned char b;

void timer0() interrupt 2 //selected timer0 interrupt//

{

b=0x10;

P1=b<<2;

}

void main()

{

unsigned char a,i;

IE=0x82 //enable the timer0 interrupt//

TMOD=0x01;

TLo=0xFC; //interrupt timer//

TH1=0xFB;

TR0=1;

a=0x00;

while(1)

{

for(i=0;i<255;i++)

{

a++;

Po=a;

}

}

}

用8051单片机进行键盘编程

矩阵键盘是一种模拟开关设备,在许多嵌入式应用中使用,允许用户执行必要的任务。矩阵键盘由行和列中矩阵格式的开关排列组成。行和列连接到微控制器,使得开关行连接到一个管脚,并且每列中的开关连接到另一个管脚,然后执行操作。

1. WAP to toggle the LED by pressing the switch

#include<reg51.h>

sbit a=P3^0;

sbit b=P3^1;

sbit c=P3^2;

sbit d=P3^3;

void delay();

void main()

{

while(1)

{

a=0;

b=1;

c=1;

d=1;

delay();

a=1;

b=0;

c=1;

d=1;

void delay()

{

unsigned char i;

TMOD=0x20; //set the timer mode//

for(i=0i<2;i++) //double the time daly//

{

TL1=0x19; //set the time delay//

TH1=0x00;

TR1=1; //timer oN//

While(TF1==0); //check the flag bit//

TF1=0;

}

TR1=0; //timer off//

}

2. WAP to Switch ON the LED by pressing the key ‘1’ on the
keypad?

#include<reg51.h>

sbit r1=P2^0;

sbit c1=P3^0;

sbit LED=P0^1;

void main()

{

r1=0;

if(c1==0)

{

LED=0xff;

}

}

3. WAP to display the number 0,1,2,3,4,5 on the seven segment by
pressing the respective key on the keypad?

#include<reg51.h>

sbit  r1=P2^0;

sbit  c1=P3^0;

sbit  r2=P2^0;

sbit  c2=P3^0;

sbit a=P0^1;

void main()

{

r1=0; a=1;

if(c1==0)

{

a=0xFC;

}

If(c2==0)

{

a=0x60;

}

if(c3==0)

{

a=0xDA;

}

If(c4==0)

{

a=0xF2;

}

}

用8051单片机进行液晶显示编程

LCD显示器是一种电子设备,在许多应用中经常用于以文本或图像格式显示信息。液晶显示器是一种可以在屏幕上轻松显示字符的显示器。液晶显示器由8条数据线和3条控制线组成,用于与微控制器接口。

WAP to display the “EDGEFX KITS” on LED display ?

#include<reg51.h>

#define kam P0

voidlcd_initi();

voidlcd_dat(unsigned char );

voidlcd_cmd(unsigned char );

void delay();

void display(unsigned char *s, unsigned char r)

sbitrs=P2^0;

sbitrw=P2^1;

sbit en=P2^2;

void main()

{

lcd_initi();

lcd_cmd(0x80);

delay(100);

lcd_cmd(0xc0);

display(“edgefx kits”,11);

while(1);

}

void display(unsigned char *s, unsigned char r)

{

unsignedint w;

for(w=0;w<r;w++)

{

lcd_data(s[w]);

}

}

voidlcd_initi()

{

lcd_cmd(0×01);

delay(100);

lcd_cmd(0×38);

delay(100);

lcd_cmd(0×06);

delay(100);

lcd_cmd(0x0c);

delay(100);

}

voidlcd_dat(unsigned char dat)

{

kam = dat;

rs=1;

rw=0;

en=1;

delay(100);

en=0;

}

}

voidlcd_cmd(unsigned char cmd)

{

kam=cmd;

rs=0;

rw=0;

en=1;

delay(100);

en=0;

}

void delay( unsigned int n)

{

unsignedint a;

for(a=0;a<n;a++);

}

使用Keil语言的嵌入式C编程教程(下)的更多相关文章

  1. 使用Keil语言的嵌入式C编程教程(上)

    使用Keil语言的嵌入式C编程教程(上) Embedded C Programming Tutorial with Keil Language Embedded System 嵌入式系统是指以单片机为 ...

  2. 第九章 C语言在嵌入式中的应用

    上章回顾 编码的规范和程序版式 版权管理和申明 头文件结构和作用 程序命名 程序注释和代码布局规范 assert断言函数的应用 与0或NULL值的比较 内存的分配和释放细节,避免内存泄露 常量特性 g ...

  3. 在嵌入式开发中应该这样理解嵌入式C编程

    一.新手常常问的一个问题:C语言和嵌入式C编程有什么区别?而嵌入式工程师一般都会告诉你,其区别在于嵌入式的C语言是跑在嵌入式的开发板上的,CPU和电脑不一样,所以编译器也是不一样的,生成的可执行程序也 ...

  4. C语言嵌入式系统编程修炼之二:软件架构篇

    模块划分的"划"是规划的意思,意指怎样合理的将一个很大的软件划分为一系列功能独立的部分合作完成系统的需求.C语言作为一种结构化的程序设计语言,在模块的划分上主要依据功能(依功能进行 ...

  5. C语言嵌入式系统编程修炼之一:背景篇

    不同于一般形式的软件编程,嵌入式系统编程建立在特定的硬件平台上,势必要求其编程语言具备较强的硬件直接操作能力.无疑,汇编语言具备这样的特质.但是,归因于汇编语言开发过程的复杂性,它并不是嵌入式系统开发 ...

  6. C语言嵌入式系统编程修炼

    C语言嵌入式系统编程修炼 2008-08-19 作者:宋宝华 来源:天极网 C语言嵌入式系统编程修炼之背景篇 本文的讨论主要围绕以通用处理器为中心的协议处理模块进行,因为它更多地牵涉到具体的C语言编程 ...

  7. [读书笔记1]《C语言嵌入式系统编程修炼》

      大学前两年一直搞的是单片机,写的是嵌入式C语言程序,走过了不少弯路,现在感觉仍然在走弯路.有幸偶尔看到了这篇文章,深感自己以前写程序的时候存在很多误区.现写篇博客做下总结. 作者:宋宝华出处:天极 ...

  8. 单片机C 语言与汇编语言混合编程

    在单片机应用系统设计中,过去主要采用汇编语言开发程序. 汇编语言编写的程序对单片机硬件操作很方便,编写的程序代码短,效率高,但系统设计的周期长,可读性和可移植性都很差.C语言程序开发是近年来单片机系统 ...

  9. [NVIDIA编程教程]OpenACC: Directives for GPUs

    NVIDIA已经在过去五年里大力发展CUDA技术,我们估计CUDA开发人员超过15万,很多重要的科学应用正在CUDA的帮助下完成.但是我们仍然有一个很长的路要走,以帮助每个人从GPU计算中享受到好处. ...

随机推荐

  1. IDA动态调试Android的DEX文件

    Android程序的dex文件的动态调试确实是个大问题,网上也有一些教程但是不是特别的详细,今天用到了IDA动态调试Android的DEX文件,特此记录一下. IDA 6.6新添加了对dex文件的调试 ...

  2. Linux中Tomcat和Jboss的安装和部署

    目录 JDK环境 yum源安装JDK 源码包安装JDK Tomcat的安装 yum源安装 目录结构: 源码包安装 目录结构: 目录中主要的文件: JBoss的安装 目录结构: Tomcat是Apach ...

  3. UVA11464偶数矩阵

    题意:       给你一个n*n的01矩阵,你的你的任务是吧尽量少的0变成1,使得每个元素的上下左右之和均为偶数(如果有的话),比如 0 0 0         0 1 0 1 0 0  ---&g ...

  4. lombok,Invalid byte tag in constant pool: 19

    今天偶到一个奇怪的问题: 三台生产服务器部署同样的代码,同样的tomcat ,jdk等环境. 其中有一台服务器启动时报lombok-1.18.6.jar!   Invalid byte tag in ...

  5. Asp.NetCore Web开发之创建项目

    ​这一节,开始讲一下如何创建一个Asp.netCore Web项目,有两种常用的方式,一种是通过.NetCore SDK使用命令创建,另一种如果你使用的VisualStudio,可以直接根据引导创建. ...

  6. 编译课设·CLion到VS踩坑·解决·备忘录

    应试用,VS使用习惯和JB系差别还是蛮大的 打不过他们就加入他们 键位修改 工具-选项 键盘:改keymap 字体和颜色:宋体必改. 自动恢复:自动保存默认3分钟 CMake:自救时可以看一下 键位名 ...

  7. 初探DBSCAN聚类算法

    DBSCAN介绍 一种基于密度的聚类算法 他最大的优势是可以发现任意形状的聚类簇,而传统的聚类算法只能使用凸的样本聚集类 两个参数: 邻域半径R和最少点数目minpoints. 当邻域半径R内的点的个 ...

  8. mysql 索引十连问| 剑指 offer - mysql

    以下是结合网上及此前面试时遇到的一些关于mysql索引的面试题. 若对mysql索引不太了解可先翻阅相关文章 大白话 mysql 之深入浅出索引原理 - 上 大白话 mysql 之深入浅出索引原理 - ...

  9. 分析Red Hat sosreport输出的方法

    分析Red Hat sosreport输出的方法? Modified on: Fri, 31 May 2019 20:20:02 +0800 有一段时间(自EL 4.6以来),Red Hat嵌入了sy ...

  10. split命令_Linux split命令:切割(拆分)文件

    <Linux就该这么学>是一本基于最新Linux系统编写的入门必读书籍,内容面向零基础读者,由浅入深渐进式教学,销量保持国内第一,年销售量预期超过10万本.点此免费在线阅读. 15 分钟之 ...