Proteus仿真:使用8255输出连续方波
实现目标
用8255C口的PC3引脚向外输出连续的正方波信号,频率为500hz
Proteus仿真图
C51代码(软件延时)
/* 采用软件延时实现 */
#include <REG52.H> /* special function register declarations */
#include <intrins.h>#define PA8255 XBYTE[0xe000] /* 定义8255A口地址 */
#define PB8255 XBYTE[0xe001] /* 定义8255B口地址 */
#define PC8255 XBYTE[0xe002] /* 定义8255C口地址 */
#define COM8255 XBYTE[0xe003] /* 定义8255控制寄存器地址 */void time(unsigned int ucMs);void init8255(void) { COM8255=0x80;/*工作方式选择字送入8255控制寄存器,设置A、B、C口为基本I/O输出方式 */
}
/******** main 函数 *********/
void main (void) { init8255();while (TRUE) { COM8255=0x07; /*PC3置1*/time(1);/* 延时1ms */COM8255=0x06; /*PC3清0*/time(1);/* 延时1ms */}
}/******** time C *********/
void time(unsigned int ucMs)//延时单位:ms
{#define DELAYTIMES 239 unsigned char ucCounter; while(ucMs>0){while(ucMs!=0);for(ucCounter=0;ucCounter<DELAYTIMEScCounter++){}//延时 ucMs--;}
笔记
- COM8255=0x80,定义8255的工作方式选择字,强调C口用于输出。
- COM8255=0x07,定义8255的C口置/复位控制字,07=0000 0111,011表示PC3,1表示置位,也就是将PC3置为1
- COM8255=0x06,定义8255的C口置/复位控制字,06=0000 0110,011表示PC3,0表示复位,也就是将PC3置为0
- 具体查询8255初始化规则
思路:采用软件延时的方法,直接对PC3引脚的电位进行修改,达到输出连续方波的效果。
C51代码(中断)
/* 采用工作方式1定时器1中断实现 */
#include <REG52.H> /* special function register declarations */
#include <Absacc.h>
#define TRUE 1
#define FALSE 0bit bitFF;/* 位计数器 */
#define PA8255 XBYTE[0xe000] /* 定义8255A口地址 */
#define PB8255 XBYTE[0xe001] /* 定义8255B口地址 */
#define PC8255 XBYTE[0xe002] /* 定义8255C口地址 */
#define COM8255 XBYTE[0xe003] /* 定义8255控制寄存器地址 *//* 初始化8255 */
/*工作方式选择字送入8255控制寄存器,设置A、B、C口为基本I/O输出方式 */
void init8255(void) { COM8255=0x80;
}
/******** main 函数 *********/
void main (void) { init8255(); /* 初始化8255 */TMOD=0x10; /* 设置定时器1为工作方式1 */ TH1=-500>>8;TL1=-500 % 256;/* 定时器1每1000计数脉冲发生1次中断,12MHz晶振,定时时间1000us */TCON=0x40; /* 内部脉冲计数 */IE=0x88; /*打开定时器中断*/ while (TRUE) {time(1);/* 延时1ms */}
}
/******* 定时器/计数器1中断服务程序 ***/
void timer1int(void) interrupt 3
{ EA=0;/* 关总中断 */TR1=0;/*停止计数*/ TH1=-500>>8;TL1=-500 % 256;/* 重置计数初值 */ TR1=1;/*启动计数*/if(bitFF)COM8255=0x07; /*PC3置1*/elseCOM8255=0x06; /*PC3清0*/bitFF=!bitFF; EA=1;/* 开总中断 */
}
上述代码同样可以实现输出连续方波的效果,只是利用中断替代了软件延时,效率高一些
Proteus仿真:使用8255输出连续方波相关推荐
- 8086+DAC0832产生方波、三角波及正弦波波形Proteus仿真
8086+DAC0832产生方波.三角波及正弦波波形Proteus仿真 仿真截图 代码 CODE SEGMENTDATA SEGMENT SQURE DB 0,0,0,0,0,0,0,0,0,0,25 ...
- 【Proteus仿真】在AT24C04的连续地址中写入数据并循环读取
[Proteus仿真]在AT24C04的连续地址中写入数据并循环读取 Proteus仿真 实验说明 在AT24C04的地址0-9中分别写入数据,然后在while循环里面循环从AT24C04的地址0-9 ...
- 基于51单片机简易数字示波器Proteus仿真
功能介绍: 采用51单片机作为主控CPU:LCD12864可显示方波,三角波,锯齿波,正弦波等,可通过光标对波形进行测量,可以调节显示波形的幅度和频率,也可以将波形进行左右拖拉,完美的仿真出一个51单 ...
- 哈尔滨工业大学(威海)校园测速系统Proteus仿真
哈尔滨工业大学(威海)校园测速Proteus仿真 实验目的 大学校园,是学生和教师生活.学习和工作的地方,校园内的道路属于人员密集区域,既要保证校园内的交通通行便利,又要保证教师和学生的安全,就要在学 ...
- 测量正弦电压信号之自制并行比较型ADC(TINA仿真)测量正弦电压之VFC模块(电压转频率,proteus仿真)
要求:对一个连续电压信号进行测量,该信号为正弦电压信号,频率是100KHZ,峰峰值为2V. 思路1:选择一些器件根据AD转换原理去搭建一个系统,进 行测量. 思路2:将电压转化成频率,再进行测量. A ...
- c语言设计一个仿真窗口的程序,51单片机C语言实例(350例)Proteus仿真和代码
100-24c02记忆开机次数 101-24c02存储上次使用中状态 102-DS1302 时钟原理 103-DS1302可调时钟 104-DS1302时钟串口自动更新时间 105-1602液晶显示D ...
- 计算机加法的电路原理及proteus仿真
最近在休假中,太宅了,也没打算到处去玩.放空脑袋,读读写写,聊以自娱. 我们知道,计算机的功能,都是通过计算来完成的,而这个计算是怎样完成的呢?答案是:电路. 在前面的文章中,我们深入探讨了编码的本质 ...
- matlab单片机仿真,51单片机proteus仿真实验设计
描述 这个proteus仿真是一个网友做的,该仿真可以生成方波.正弦波.锯齿波和三角波,并且还可以用按键调整波形. 不过,对初学者来讲,可能有点复杂.对于本科生来说,这个仿真几乎可以作为毕业论文了吧. ...
- 单片机实验笔记(汇编、Proteus仿真)(下)
接上一条单片机实验笔记(汇编.Proteus仿真) 第五节课 第五节课 内容为驱动多位数码管.和驱动一位数码管大同小异. ORG 0000H LJMP MAINORG 0100H MAIN: MOV ...
- 51单片机c语言算法大全,51单片机C语言实例(350例)Proteus仿真和代码都有
1-IO输出-点亮1个LED灯方法1 / h7 h! }$ P, {* F7 J T10-LED循环左移 ! R+ }$ j) t5 a' \0 A100-24c02记忆开机次数 - d2 Q9 v ...
最新文章
- [转] splice系列系统调用
- linux打包压缩命令汇总
- 合并区间—leetcode56
- php for循环 循环奇数,php – Foreach,每个n项的特殊处理(奇数,甚至例如)
- java反射 修改静态方法的值 setAccessible
- 工作209:整理订单的重置逻辑
- 使用Cross-Page Postback(跨页面提交)在页面间传递数据
- idea代码可以编译但是爆红_推荐一款 IDEA 生成代码神器,写代码再也不用加班了...
- MyBatis入门基础(一)
- activiti流程变量
- word打开提示“所用加密类型不可用”
- EventUtil——跨浏览器的事件对象
- uniapp访问服务器缓存文件,uni-app浏览历史记录功能实现
- Apple苹果EDI案例
- 人脸识别产品问题及改进方法
- [附源码]java毕业设计家政管理系统
- Java中就什么是映射的简单理解
- 传奇链改游戏开发(传奇复古MIC)链游市场分析全面测评
- mac 请尝试使用字符较少,或不含标点符号的名称
- Oracle 快速入门 同义词序列视图索引