使用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. 【手打】coredns单台使用

    目录: coredns介绍 coredns安装 corendns配置 coredns介绍 CoreDNS 其实就是一个 DNS 服务,而 DNS 作为一种常见的服务发现手段,所以很多开源项目以及工程师 ...

  2. 【aws-系统】简单的SNS到电报通知机器人

    动机 我已经使用此设置几个月了,这是我的用例: 预定的提醒.我有一些安排好的CloudWatch Events,以提醒我有关各种日常活动以及我从文章和书籍中保存的想法数据库中的随机推销的信息. 应用程 ...

  3. hdu4829 带权并查集(题目不错)

    题意: Information Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Tot ...

  4. Linux 内核调度器源码分析 - 初始化

    导语 上篇系列文 混部之殇-论云原生资源隔离技术之CPU隔离(一) 介绍了云原生混部场景中CPU资源隔离核心技术:内核调度器,本系列文章<Linux内核调度器源码分析>将从源码的角度剖析内 ...

  5. WPF使用自定义Main函数

    一.自定义Main函数 在WPF中,我们添加一个Program静态类,添加一个Main静态方法,需要注意的是该方法需要添加"STAThread",表示WPF程序需运行在单一线程单元 ...

  6. Zookeeper详细使用解析!分布式架构中的协调服务框架最佳选型实践

    Zookeeper概念 Zookeeper是分布式协调服务,用于管理大型主机,在分布式环境中协调和管理服务是很复杂的过程,Zookeeper通过简单的架构和API解决了这个问题 Zookeeper实现 ...

  7. [项目] 淘淘商城 Part.1

    电商 市场 2013:79万笔/分钟 2014:13.4万亿,双11支付宝交易峰值285万笔/分钟 2015:50万亿 技术特点 一个Tomcat:500并发 分布式:上万并发 高并发.集群.负载均衡 ...

  8. 8.8-9 fsck、dd

    8.8 fsck:检查并修复Linux文件系统 fsck命令用于检查并修复文件系统中的错误,即针对有问题的系统或磁盘进行修复,类似的命令还有e2fsck命令.有关fsck的使用需要特别注意的是:    ...

  9. 『动善时』JMeter基础 — 24、JMeter中使用“用户参数”实现参数化

    目录 1.用户参数组件介绍 2.用户参数界面介绍 3.使用"用户参数"组件实现参数化 (1)测试计划内包含的元件 (2)线程组元件内容 (3)HTTP请求组件内容 (4)用户参数组 ...

  10. 【JDK命令行 一】手动编译Java源码与执行字节码命令合集(含外部依赖引用)

    写作目标 记录常见的使用javac手动编译Java源码和java手动执行字节码的命令,一方面用于应对 Maven 和 Gradle 暂时无法使用的情况,临时生成class文件(使用自己的jar包):另 ...