导航: 老古网老古论坛XMOS公共讨论区XMOS开源项目区单片机程序设计嵌入式系统广告区域
→哪位熟悉80C196 的朋友能帮个忙,请教2个小问题,谢谢了[坦克无敌]

 *第12599篇: 哪位熟悉80C196 的朋友能帮个忙,请教2个小问题,谢谢了

  
楼 主:坦克无敌 2003年5月25日13:45
 哪位熟悉80C196 的朋友能帮个忙,请教2个小问题,谢谢了
关于80c196 KC 以下问题,哪位熟悉196的朋友能帮个忙?

请问以下问题:

问题1:

80c196KC 的 Timer2 定时器 采用外部时钟,产生溢出中断。

资料上讲:Timer2 定时器产生溢出中断的向量是:0x2038

该中断申明表达式,到底怎样写?

(1)#pragma interrupt (Timer2_isr=12)  
(2)#pragma interrupt (Timer2_isr=0x2038)
(3)#pragma interrupt (Timer2_isr=28)  
     又有朋友说:2038h-----38h=56d   于是这里应该是 Timer2_isr=28

 这里到底该是多少?我一直没有彻底搞明白?

 因为:其他中断,书上都找到了明确的例子,所以也没有出现问题,例如:

#pragma interrupt(ExtInt=7)     外部中断  表述正确,其序号确实为:7
#pragma interrupt( HSO=0x2006)  HSO中断  表述正确,其向量确实为:2006

这样都对。我也没有仔细思考过,这是为什么?
那个地方,保证了着2种方式,都对?

——————————————————————————————

对于定时器2中断的以上3种声明,都编译通不过,提示:
目标文件地址错。

具体源程序如下:

程序目的:
Timer2 定时器 采用外部时钟,Timer2随便搞个初值,例如0xF000,于是计量,够了FFFF,
产生溢出中断,在中断服务程序中,断点可以停住就行了。


#include   <kc_sfrs.h>  
#include   <kc_funcs.h>  

#pragma interrupt (Timer2_isr=12)   /* Timer2 定时器*/
//#pragma interrupt (Timer2_isr=0x2038)   /* Timer2 定时器*/
//#pragma interrupt (Timer2_isr=12)   /* Timer2 定时器*/

/*以上这3种方式,都不行*/

void main()
{
  unsigned int TempT2;

  wsr = 0x0;
  ioc0=0x02;        /*Timer2 定时器 外部时钟     复位源 是:t2rest 不是:HSO.0*/
                    /*禁止外部复位源  每次写Timer2 复位*/

  ioc1 |=0x08;                 /* 朋友提醒要加这一句,但不明白 */

  //ioc3=0;           /*Timer2 定时器 外部时钟*/
  
  int_mask1=0x10;   /*允许 Timer2 定时器 中断*/

  timer2 = 0xF000;  /*随便一个初值*/

  while (1) 
  {
    TempT2 = timer2;    // 读取T2CLK脚上的上升/下降沿
    
    /*随机的把程序停下来,可以看到这个TempT2值,是跟着变化的*/
    /*用更严格的办法,也可以证明,TempT2值,是跟着外部时钟变化正确的*/
  }
}


void Timer2_10ms_isr()
{
 
 timer2 = 0;           /*断点打在这里,永远也停不住,即永远进入不了中断*/
}


#################################################


问题2:用HSO查询方式使HSO.0与HSO.1输出相同波形,以下程序已经实现,而且正确。

但我希望:用HSO查询方式使HSO.0与HSO.1输出相反波形。如何实现?

因为:hso_command的低4位为6时,则HSO.0与HSO.1同时相同动作。于是产生相同波形好办。

但如果是产生相反波形,如何实现?可以允许,2者之间有些滞后。

这样也可以:
____│▔▔▔▔▔▔│________│▔▔▔▔▔▔│________│▔▔▔▔▔▔│____

▔▔▔│____________│▔▔▔▔│____________│▔▔▔▔│____________│▔▔

主要是我那几个 hso_command     hso_time 搞的有些乱,哪位如果有时间,能否帮我试试?


#include   <kc_sfrs.h>  

#define TimerC 3000        //定时常数

#define RatioH 2000        //高电平时间

#pragma interrupt(pwm_out=0x2006)

void pwm_out()    /* 中断服务程序输出将输出引脚状态反转指示 */
{
  
  if(ios0 & 0x01)
  {
    hso_command = 0x16;                 // 预置低电平
    hso_time = timer1 + RatioH;         // 高电平时间宽度
  }else
  {
    hso_command = 0x36;                 // 预置高电平
    hso_time = timer1 + TimerC-RatioH;  // 低电平时间宽度
  }
}

void main ()
{
  hso_command = 0x36;                  /*  0      0         1          1  , 0000   */
                                       /*无关  定时器1  置位HSO引脚  中断   HSO.0  */
  hso_time = timer1 + 250;
  int_mask = 0x08;
  int_pend = 0;
  enable();

  while(1);
}


哪位如果能将以上2个程序,帮我调通,坦克 更是感激了。

谢谢了。


  
2楼:坦克无敌 2003年5月26日17:30
 俺自己顶一下。盼高手指导!
俺自己顶一下。盼高手指导!

>>>>>>对该主题发表你的看法

本主题贴数2,分页: [第1页]


[上一篇主题]:如何在Keil C51中使用计算机串口?

[下一篇主题]:数字电路设计,急!!!请各位哥哥姐姐帮忙,谢谢!!!!!