標題: [討論]關(guān)于12C887的中斷問題 [打印本頁]

作者: daisy38    時間: 2009-6-11 10:23
標題: [討論]關(guān)于12C887的中斷問題

#include <ABSACC.H>    //cs接P2^7,wr、rd與8031一一對應(yīng)//
#include <REG52.H>   
#define  uchar unsigned char   
#define  MCA XBYTE[0xff0a]   /* 寄存器A */   
#define  MCB XBYTE[0xff0b]    /* 寄存器B */   
#define  MCC XBYTE[0xff0c]    /* 寄存器C */   
#define  MCD XBYTE[0xff0d]    /* 寄存器D */     
sbit uip_bit=ACC^7;  
  
uchar idata dt[6]={09,6,9,21,44,25}; /* 99/4/5 11:11:25 */              
uchar at[6]={9,8,7,4,2,0};   /* 年、月、日、時、分、秒 的地址*/  
  
uchar xdata *addr=0xff00;   /* 片選地址 */  
  
void init(void) {    /* 初始化函數(shù) */  
  MCA=0x2f;        /* 時鐘頻率為32.768kHz,中斷周期500ms */  
  ACC=MCC;         /* 讀寄存器C,清零中斷請求標志 */  
  ACC=MCD;         /* 讀寄存器D,使VRT=1,數(shù)據(jù)有效 */  
  MCB=0x52;        /* 允許中斷,時標為BCD碼,24小時方式 */     
  EA=1;           /* 開中斷 */  
  EX0=1;  
}  
void write_ds(void)
{                       /* 寫時標函數(shù) */  
  uchar i;  
  MCB=0x80;             /* 使set=1 */   為什么這里不把B寄存器的內(nèi)容寫如ACC呢??
  for(i=0;i<=6;i++)     /* 置時標初值 */  
   *(addr+at)=dt;  
}  
void read_ds(void)
{                     /* 讀時標函數(shù) */  
  uchar i;  
  ACC=MCA;這里為什么又不設(shè)置A寄存器的內(nèi)容呢??
  while(uip_bit);       /* 判UIP位 */  
  for(i=0;i<6;i++)     /* 讀時標寄存器的值 */  
   dt=*(addr+at);  
}  
void main(void)
{                /* 主函數(shù) */  
   write_ds();  
   init();  
   read_ds();  
   while(1);  
}  
   還有為什么不設(shè)置CS、DS、AS、WR呢??

難道使用了片外地址之后就不用設(shè)置了嗎/那是不是直接與8031對應(yīng)的斷口連接起來就是了呢??高手指點一下,小弟我剛學(xué)51不久。






歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1