zoukankan      html  css  js  c++  java
  • 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区域了。反正后面执行均正常。详细原因。有时间再研究。



  • 相关阅读:
    机器学习&数据挖掘笔记_16(常见面试之机器学习算法思想简单梳理)
    linux_shell_根据网站来源分桶
    mac_Alfred_快捷设置
    linux_无密登录
    crawler_Docker_解决用 JavaScript 框架开发的 Web 站点抓取
    linux下查看最消耗CPU、内存的进程
    绕过登陆常用万能密码
    ctf比赛linux文件监控和恢复shell
    Python爬虫之Selenium的常用方法
    CTF比赛时准备的一些shell命令
  • 原文地址:https://www.cnblogs.com/blfbuaa/p/6705881.html
Copyright © 2011-2022 走看看