实验四51单片机并口实验

一.实验目的:

1. 了解51单片机I/O口的电气特性和驱动能力。

2. 了解LED电路中加入限流电阻的原因。

3. 掌握定时器原理及编程。

4. 掌握并口程序的编辑、编译、调试和运行。

二.实验设备和器件

1. PC

2. PROTEUS仿真软件   

3. 实验箱

4. ISP下载器

5. 51仿真器            

三.实验内容

(1)编程实现:采用定时器0每隔1s点亮1发光二极管

① 电路图:

 

② 代码:

Ø 中断处理方式:

ORG 0000H

LJMP MAIN  

ORG 000BH

LJMP INTT0

ORG 0100H

MAIN:

MOV TMOD,#01H   //TMOD为方式寄存器,该题是定时器0,且为方式1,则TMOD=0000_0001

MOV TH0,#3CH   

MOV TL0,#0B0H  //初值的计算

MOV R2,#00H    //计数寄存器

MOV A,#0FEH    

MOV P0, A      //设置灯的初状态,第D0个灯亮

SETB EA      // 允许单片机总中断,SETB bit:位置1

SETB ET0     //允许T0溢出中断

SETB TR0     //开启定时器0

SJMP $       //必须要有死循环,表示等待定时过程,否者只有一个灯亮

INTT0:       //定时到进入中断

MOV TH0,#3CH

MOV TL0,#0B0H   //每次定时都需要重新赋初值

INC R2          //计数次数加1

CJNE R2,#0AH,NEXT   //判断计数次数是否等于10,不等跳转到NEXT

RL    A            //计数次数到10次之后,A左移

MOV   P0, A        //下一个灯亮

MOV R2,#00H        //计数清0

NEXT:

RETI

END

Ø 查询处理方式:

ORG 0000H

LJMP MAIN

ORG 0100H

MAIN:

MOV TMOD,#01H

MOV TH0,#3CH

MOV TL0,#0B0H

MOV R2,#00H

MOV A,#0FEH

MOV P0,A

SETB TR0

LOOP:

JBC TF0,NEXT1 //判断TF0是否溢出,及TF0是否为1,有则跳转到NEXT1,并把TF0清0

SJMP LOOP    //无溢出,一直查询

NEXT1:  

MOV TH0,#3CH

MOV TL0,#0B0H  //每次定时都需要重新赋初值

INC R2

CJNE R2,#0AH,NEXT

RL   A

MOV  P0, A

MOV  R2,#00H

SJMP LOOP

NEXT:

SJMP LOOP

SJMP $

END

③ 分析:

初值的计算:系统时钟为6MHz,机器周期为2,当采用工作方式1时,最大的定时时间为:,则每隔1s一个定时器不能直接实现,即用定时器T0产生周期为100ms=0.1s的定时,用一个寄存器R2对100ms计数10次,则可以产生1s的定时。

T0的定时为100ms时,初值:


十六进制数为3CB0H

(2)编程实现:上电时, 8个发光二极管全亮;按下K1时,发光二极管向左(向下)移一位;按下K2时,发光二极管向右(向上)移一位。

① 电路图:

 

② 代码:

#include <reg51.h>

#include <intrins.h>

#define uchar unsigned char

#define uint unsigned int

uint i;

sbit P1_0=P1^0;   sbit P1_1=P1^1;   //定义并口P1的第0、1位

void Time_Init() //定时器装入初值 T0定时时间为100ms,T1定时时间为50ms

{

TMOD=0x11;  

TH0=0x3c; TL0=0xb0;

TR0=0;//初始化后并不启动定时器T0,待命

TH1=0x9e;  TL1=0x58;

TR1=0;//初始化后并不启动定时器T1,待命

}

void main()

{

Time_Init(); //初始化定时器  

i=0;

P0=0x0;  //上电时, 8个发光二极管全亮

while(1)

{

if(P1_0==0)  //当P1.0有效时,及开关K1按下

{  EA=1;    TR1=0;//关闭定时器1

TR0=1;   ET0=1;//允许中断0,打开定时器0

P0=0x7f;   // 给灯赋初值,第8个灯亮

}

if(P1_1==0)  //当P1.1有效时,及开关K2按下

{  

EA=1;   

TR0=0;  //关闭定时器0

TR1=1;  ET1=1;  //允许中断1,打开定时器1

P0=0xfe;     // 给灯赋初值,第1个灯亮

}}}

 

void time0_int(void) interrupt 1   //中断服务程序1

{

TH0=0x3c;   TL0=0xb0;   //每次定时都需要重新赋初值

i++;       //计数加1

if(i==10)

{

i=0;

P0= _cror_(P0,1); //循环右移(向上)1位,点亮下一个灯

}}

 

void time1_int(void) interrupt 3

{

TH1=0x9e;TL1=0x58; //每次定时都需要重新赋初值

i++;

if(i==20)

{

i=0;

P0= _crol_(P0,1); //循环左移(向下)1位,点亮下一个灯

}}

③ 分析:

Ø 该题中最上面的灯为第一个灯,

K1---P0=0x7f---向上移

K2---P0=0xfe---向下移

Ø   该题才用的两个定时器T0、T1

T0的初值计算:

 

十六进制数为3CB0H   计数10次

T0的初值计算:

 

十六进制数为9E58H   计数10次

 

四.部分知识点及遇到的问题:

(1) 定时/计数器T0工作方式:

Ø 方式0  M1 M0=00  13 位定时/计数器

Ø 方式1  M1 M0=01  16 位定时/计数器(每次定时均需重新赋值,TF0=0

Ø 方式2  M1 M0=10   8位自动充值定时/计数器

Ø 方式3  M1 M0=11   两个9位定时/计数器

(2) 用了T1之后,T0不可以执行:定时器T1比定时器T0优先级高

(3) 开关与灯在该仿真电路中均是低电平有效

(4) 中断服务程序的格式:void 函数名(voidinterrupt  寄存器组(1、2、3、4)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/493480.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

5G 建设拉动光模块量价齐升

来源&#xff1a;国联证券光模块是光通信的核心部件&#xff0c;它主要完成光电转换和电光转换。行业增长稳定&#xff0c;行业内的头部企业通过不断并购完成上下游的整合&#xff0c;提供一体化的解决方案。国内企业在快速的追赶外资标杆企业&#xff0c;产品逐步往高端方向转…

tensorflow权重初始化

一&#xff0c;用10层神经网络&#xff0c;每一层的参数都是随机正态分布&#xff0c;均值为0&#xff0c;标准差为0.01 #10层神经网络 data tf.constant(np.random.randn(2000, 800).astype(float32)) layer_sizes [800 - 50 * i for i in range(0, 10)] num_layers len(l…

单片机实验报告-片内外RAM的数据转移

一、实验目的&#xff1a; 1.掌握C51编程基础&#xff0c;C51程序结构。 2.掌握C51数据类型、函数设计。 3.掌握C51程序的编辑、编译、调试和运行 二、编程提示 编程将片外8000H单元开始的10字节的内容移至8100H开始的各单元中。8000H单元开始的10字节内容用编程方式赋值。…

单片机实验-定时中断

一.实验目的 1.掌握51单片机定时器工作原理。 2.掌握51单片机中断系统工作原理。 3.掌握定时器初始化编程。 4.掌握中断程序的编写和调试。 二.实验设备和器件 1.KEIL软件 2.PROTEUS仿真软件 3.伟福实验箱 三&#xff0e;实验内容 &#xff08;1&#xff09;编程实…

2018全球最值得关注的60家半导体公司,7家中国公司新上榜 | 年度榜单

编译 | 张玺 四月来源&#xff1a;机器之能由《EE Times》每年评选全球值得关注的 60 家新创半导体公司排行榜——『Silicon 60』&#xff0c;今年已经迈向第 19 届&#xff0c;今年的关键词仍然是「机器学习」(machine learning)&#xff0c;它正以硬件支持的运算形式强势崛起…

单片机实验报告-串口实验

一.实验目的 1. 掌握 51 单片机串口工作原理。 2. 掌握 51 单片机串口初始化编程。 3. 掌握 51 单片机串口的软硬件编程。 二.实验设备和器件 1.KEIL软件 2.PROTEUS仿真软件 3.伟福实验箱 三&#xff0e;实验内容 &#xff08;1&#xff09;编程实现&#xff1a…

学习率周期性变化

学习率周期性变化&#xff0c;能后解决陷入鞍点的问题&#xff0c;更多的方式请参考https://github.com/bckenstler/CLR base_lr:最低的学习率 max_lr:最高的学习率 step_size&#xff1a;&#xff08;2-8&#xff09;倍的每个epoch的训练次数。 scale_fn(x)&#xff1a;自…

清华发布《人工智能AI芯片研究报告》,一文读懂人才技术趋势

来源&#xff1a;Future智能摘要&#xff1a;大数据产业的爆炸性增长下&#xff0c;AI 芯片作为人工智能时代的技术核心之一&#xff0c;决定了平台的基础架构和发展生态。 近日&#xff0c;清华大学推出了《 人工智能芯片研究报告 》&#xff0c;全面讲解人工智能芯片&#xf…

开发者账号申请 真机调试 应用发布

技术博客http://www.cnblogs.com/ChenYilong/ 新浪微博http://weibo.com/luohanchenyilong 开发者账号申请 真机调试 应用发布 技术博客http://www.cnblogs.com/ChenYilong/新浪微博http://weibo.com/luohanchenyilong 要解决的问题 • 开发者账号申请 • 真机调试 • 真机调…

单片机实验-DA实验

一、实验目的 1、了解 D/A 转换的基本原理。 2、了解 D/A 转换芯片 0832 的性能及编程方法。 3、了解单片机系统中扩展 D/A 转换的基本方法。 二.实验设备和器件 1.KEIL软件 2.实验箱 三&#xff0e;实验内容 利用 DAC0832&#xff0c;编制程序产生锯齿波、三角波、正弦…

进化三部曲,从互联网大脑发育看产业互联网的未来

摘要&#xff1a;从互联网的左右大脑发育看&#xff0c;产业互联网可以看做互联网的下半场&#xff0c;但从互联网大脑的长远发育看&#xff0c;互联网依然处于大脑尚未发育成熟的婴儿时期&#xff0c;未来还需要漫长的时间发育。参考互联网右大脑的发育历程&#xff0c;我们判…

pycharm远程连接服务器(docker)调试+ssh连接多次报错

一&#xff0c;登入服务器建docker nvidia-docker run -it -v ~/workspace/:/workspace -w /workspace/ --namefzh_tf --shm-size 8G -p 1111:22 -p 1112:6006 -p 1113:8888 tensorflow/tensorflow:1.4.0-devel-gpu bash 二&#xff0c;开ssh服务 apt-get update apt-get i…

Verilog HDL语言设计4个独立的非门

代码&#xff1a; module yanxu11(in,out); input wire[3:0] in; output reg[3:0] out; always (in) begin out[0]~in[0]; out[1]~in[1]; out[2]~in[2]; out[3]~in[3]; end endmodule timescale 1ns/1ns module test(); reg[3:0] in; wire[3:0] out; yanxu11 U(…

深度长文:表面繁荣之下,人工智能的发展已陷入困境

来源&#xff1a;36氪编辑&#xff1a;郝鹏程摘要&#xff1a;《连线》杂志在其最近发布的12月刊上&#xff0c;以封面故事的形式报道了人工智能的发展状况。现在&#xff0c;深度学习面临着无法进行推理的困境&#xff0c;这也就意味着&#xff0c;它无法让机器具备像人一样的…

Verilog HDL语言设计一个比较电路

设计一个比较电路&#xff0c;当输入的一位8421BCD码大于4时&#xff0c;输出为1&#xff0c;否则为0&#xff0c;进行功能仿真&#xff0c;查看仿真结果&#xff0c;将Verilog代码和仿真波形图整理入实验报告。 代码&#xff1a; module yanxu12(in,out); input wire[3:0] i…

交叉熵

1.公式 用sigmoid推导 上式做一下转换&#xff1a; y 视为类后验概率 p(y 1 | x)&#xff0c;则上式可以写为&#xff1a; 则有&#xff1a; 将上式进行简单综合&#xff0c;可写成如下形式&#xff1a; 写成对数形式就是我们熟知的交叉熵损失函数了&#xff0c;这也是交叉熵…

第5章 散列

我们在第4章讨论了查找树ADT&#xff0c;它允许对一组元素进行各种操作。本章讨论散列表(hash table)ADT&#xff0c;不过它只支持二叉查找树所允许的一部分操作。 散列表的实现常常叫作散列(hashing)。散列是一种以常数平均时间执行插入、删除和查找的技术。但是&#xff0c;那…

谷歌自动驾驶是个大坑,还好中国在构建自己的智能驾驶大系统

来源&#xff1a;张国斌中国有堪称全球最复杂的路况&#xff0c;例如上图是去年投入使用的重庆黄桷湾立交桥上下共5层&#xff0c;共20条匝道&#xff0c;堪称中国最复杂立交桥之最&#xff0c;据称走错一个路口要在这里一日游&#xff0c;这样的立交桥如果让谷歌无人驾驶车上去…

Verilog HDL语言设计计数器+加法器

完成课本例题4.12&#xff0c;进行综合和仿真&#xff08;包括功能仿真和时序仿真&#xff09;&#xff0c;查看仿真结果&#xff0c;将Verilog代码和仿真波形图整理入实验报告。 功能文件&#xff1a; module shiyan1(out,reset,clk); input reset,clk; output reg[3:0] ou…

自动驾驶寒冬与否,关键看“芯”

来源&#xff1a;智车科技摘要&#xff1a;2018年&#xff0c;全世界瞩目的半导体行业大事件无疑是高通收购恩智浦了。虽然&#xff0c;最终这笔收购案以失败结尾&#xff0c;但高通的收购恩智浦的意图就是出自于拓展汽车芯片市场。智能汽车芯片的重要性也得以突显。前不久&…