C51中遇到一个有关data与xdata的问题,已解决
环境:
我在某个C文件定义了一个结构体变量,然后该变量仅仅是在本文件内被一个函数使用,然后又在中断中调用了该函数,目的是改变一个IO口的输出状态,结果运行时怎么也达不到要的效果。
struct BE
{
unsigned int CountFR; //定时器计数值。通过改变计数值改变音频频率
unsigned char PWR_time; //开启时间,单位为10mS
unsigned char FREQ_time; //音频供给时间,单位为10mS
unsigned char index; //音符计数。指示当前须要演奏的音符
};
struct BE Beep;
/*******************************************************************************
* 函 数 名 :Timer1Int
* 函数功能 :定时器1中断服务函数, 控制节拍时长 10ms
* 输 入 :无
* 输 出 :无
*******************************************************************************/
void Timer1Int() interrupt 3 using 3 //採用中断3 控制频率
{
if(flag == 1)
{
TH1=(65536-10000)/256;
TL1=(65536-10000)%256; //10ms定时
// BeepControl();
Beep_control();
return;
} //--进入一次中断,表明计数到了65536--//
Freq=Freq+65536; }
现象:
使用示波器查看IO口输出,奇葩的是当断开外设。引脚悬空时(51单片机输出默认是上拉为高的)。在复位启动的情况下IO口输出正常,可是在断电启动的情况下,IO口输出异常;当引脚接外设,外设是一个三极管,连基极。假设非常快断电重新启动。输出也为正常。仅仅是偶尔会变形。在异常情况下。IO口输出一直保持低电平,可是还有一个IO口输出正常,还有一个IO口是在还有一个优先级较高的定时器里实现的。
模拟仿真时,输出波形也是对的,就是实时执行时不正确。
/*******************************************************************************
* 函 数 名 :Timer0Int
* 函数功能 :定时器0中断函数 , 每隔TIME_MS ms进入
* 输 入 :无
* 输 出 :无
*******************************************************************************/
void Timer0Int() interrupt 1 using 1
{
static unsigned int count1s = 0; if(flag == 1)
{
TH0=Beep.CountFR/256;
TL0=Beep.CountFR%256;
BUZZER_IO = ~BUZZER_IO;
return;
}
解决方法:
将该结构体变量加入data修饰就好了。例如以下:
data struct BE Beep;
如今还不知道为什么会这样。加入之后,能够看编译结果该变量存储到data区域了。反正后面执行均正常。详细原因。有时间再研究。
C51中遇到一个有关data与xdata的问题,已解决的更多相关文章
- External Libraries中没有Maven的jar包的原因(已解决)
**深坑!** ## External Libraries中没有Maven的jar包的原因(已解决) 2021年3月1日 --- 搭建一个新项目 IDEA 从 Git 上拉 拉去Maven项目然后 m ...
- keil C51中建立多文件时,变量重复定义的解决
c/c++语言中有很多地方要用到extern,但是如果没有真正的了解它的意义,会给编程带来很大的麻烦,为了使大家少走弯路,特祥细的说明一下. 对于比较小的程序,一般只有一个c文件和一个头文件,全局变量 ...
- 解决Postman发送post数据但是Node.js中req.body接收不到数据的问题[已解决]
之前编写后台接口,测试数据都是使用的Postman,相当的方便,之前也一直使用get方法,编写Node.js一直没有问题,但是由于要编写一个注册/登陆的功能,所以发送的post数据,后台的逻辑已经编写 ...
- 问题:modbus_tk开发中遇到[Errno 98] Address already in use (已解决)
案例: from modbus_tk import modbus_tcp,defines import time s = modbus_tcp.TcpServer(port=5300) def mai ...
- 探讨一个“无法创建JVM”的问题(已解决)
ava版本:1.4 运行设置: -Xms1G -Xmx4G 报错: [ Incompatible initial and maximum heap sizes specified: ][ initia ...
- 单片机成长之路(51基础篇) - 017 C51中data,idata,xdata,pdata的区别(转)
从数据存储类型来说,8051系列有片内.片外程序存储器,片内.片外数据存储器,片内程序存储器还分直接寻址区和间接寻址类型,分别对应code.data.xdata.idata以及根据51系列特点而设定的 ...
- 关于keil中data,idata,xdata,pdata,code的问题
转自关于keil中data,idata,xdata,pdata,code的问题 从数据存储类型来说,8051系列有片内.片外程序存储器,片内.片外数据存储器,片内程序存储器还分直接寻址区和间接寻址类 ...
- 关于keil单片机编程中的data,idata,xdata,pdata,code数据类型
从数据存储类型来说,8051系列有片内.片外程序存储器,片内.片外数据存储器,片内程序存储器还分直接寻址区和间接寻址类型,分别对应code.data.xdata.idata以及根据51系列特点而设定的 ...
- 在51系列中data,idata,xdata,pdata的区别
在51系列中data,idata,xdata,pdata的区别: data:固定指前面0x00-0x7f的128个RAM,可以用acc直接读写的,速度最快,生成的代码 也最小. idata:固定指前面 ...
随机推荐
- 七、如何在Java中高效检查一个数组是否含有一个值
如何检查一个数组(非排序的)是否包含特定的值.这是个非常有用或经常被在Java中使用.这是个在Stack Overflow中高得票的问题.在已经高得票的答案中,有许多不同的处理方法,但是时间的复杂度非 ...
- 一个div层在页面上下左右居中以及数据的排序
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- Android的Message机制(简单小结)
对于Android的Message机制主要涉及到三个主要的类,分别是Handler.Message.Looper:首先对每个类做一个简单介绍:然后再介绍所谓的Android的Message机制是如何实 ...
- activiti5.13工作流系列(一)-初识
1.什么是工作流? 工作流就是让多个参与者之间按照某种预定义的规则传递文档.信息或任务的过程,工作流由实体(Entity).参与者(Participant).流程定义(Flow Definition) ...
- 【WPF/C#】拖拽Image图片控件
需求:使得Image图片控件能够被拖动. 思路:关键是重写Image控件的几个鼠标事件,实现控制. 前台: <Image Source="C:\Users\Administrator\ ...
- Apache HttpComponents 获取页面内容String方式
/* * ==================================================================== * Licensed to the Apache S ...
- 人脸识别技术大总结1——Face Detection & Alignment
搞了一年人脸识别,寻思着记录点什么,于是想写这么个系列,介绍人脸识别的四大块:Face detection, alignment, verification and identification(re ...
- Nginx动静分离知识及配置
Nginx动静分离知识及配置,本质上与分离上传下载功能是相同功能,本质就是在文件服务器也是需要部署WEB应用的,只是在进行代理分离的时候分配到对应的文件服务器上去. 随着Nginx高性能Web服务器大 ...
- 数据结构——算法之(043)(c++各种排序算法实现)
[申明:本文仅限于自我归纳总结和相互交流,有纰漏还望各位指出. 联系邮箱:Mr_chenping@163.com] 题目: c++ 各种排序算法实现 题目分析: 详细排序原理參考相关算法书籍 算法实现 ...
- volatile关键字的介绍和使用
关键字volatile的主要作用是使变量在过个线程中可见 1.假设volatile不存在我们将会面对的问题 public class PrintString implements Runnable { ...