/****************************************Copyright (c)**************************************************
** Guangzou ZLG-MCU Development Co.,LTD.
** graduate school
** http://www.zlgmcu.com
**
**--------------File Info-------------------------------------------------------------------------------
** File name: main.c
** Last modified Date: 2004-09-16
** Last Version: 1.0
** Descriptions: The main() function example template
**
**------------------------------------------------------------------------------------------------------
** Created by: lls
** Created date: 2006-09-16
** Version: 1.0
** Descriptions: The original version
**
**------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date: 2006-09-21
** Version:
** Descriptions:
**
*******************************************************************************************************
** 功能 :
** 上位机使用EasyARM软件全仿真的DOS窗口观察。
** 说明 :
** 通讯波特率115200,8位数据位,1位停止位,无奇偶校验。
*******************************************************************************************************
*/
#include "config.h"
#include "stdio.h"
#include "math.h"
uint32 DA_OUT,DCT;
uint32 value[6][7];
/*数组:六个参数的标准值(比较错误时用)*/
uint32 biaozhunzhi[6]={0.8*413, //VIL
2.0*413, //VIH
2.7*413, //VOH
0.5*413, //VOL
4*1024/2480, //IIL
8*1024/2480}; //IOL
/*数组:继电器使用情况*/
uint32 a[6][3]={(1<<8) |(1<<17),(1<<8),(1<<17), //J1 J7
(1<<9) |(1<<18),(1<<9),(1<<18), //J2 J8
(1<<10)|(1<<19),(1<<10),(1<<19), //J3 J9
(1<<12)|(1<<20),(1<<12),(1<<20), //J4 J10
(1<<13)|(1<<23),(1<<13),(1<<23), //J5 J11
(1<<16)|(1<<27),(1<<16),(1<<27)}; //J6 J12
uint8 ay[7]={1,2,3,4,5,6,7}; //数组:六个参数的名称
uint8 fm1,fm2,fm3,fm4,fm5,fm6; //非门编号
uint8 zj_flag; //三角波过顶标志
uint8 rcv_buf[18];
uint8 rcv_dat0;
/*实际电路中各参数要修正的偏差系数*/
const float ad01x = 1.905; //AD0.1测VOH
const float ad03x = 1.905; //AD0.3测VIH
const float ad05x = 0.500; //AD0.5测IIL
const float ad15x = 0.500; //AD1.5测VIL
const float ad16x = 0.500; //AD1.6测VOL
const float ad17x = 1.900; //AD1.7测IOL(看为高电平)
/*模拟开关CD4051 GPIO口*/
#define A0 1<<16 //P1.16 IO1DIR
#define A1 1<<17 //P1.17 IO1DIR
#define A2 1<<24 //P1.24 IO1DIR
/*继电器 GPIO口*/
#define J1 1<<8 //P0.8 IO0DIR 非门1 (左)
#define J2 1<<9 //P0.9 IO0DIR 非门2
#define J3 1<<10 //P0.10 IO0DIR 非门3
#define J4 1<<12 //P0.12 IO0DIR 非门4
#define J5 1<<13 //P0.13 IO0DIR 非门5
#define J6 1<<16 //P0.16 IO0DIR 非门6
#define J7 1<<17 //P0.17 IO0DIR 非门1 (右)
#define J8 1<<18 //P0.18 IO0DIR 非门2
#define J9 1<<19 //P0.19 IO0DIR 非门3
#define J10 1<<20 //P0.20 IO0DIR 非门4
#define J11 1<<23 //P0.23 IO0DIR 非门5
#define J12 1<<27 //P0.27 IO0DIR 非门6
/*LED灯 GPIO口*/
const uint32 LED1 = (1 << 18); //P1.18 IO1DIR 控制LED1低电平点亮
const uint32 LED2 = (1 << 19); //P1.19 IO1DIR 控制LED2低电平点亮
const uint32 LED3 = (1 << 20); //P1.20 IO1DIR 控制LED3低电平点亮
const uint32 LED4 = (1 << 21); //P1.21 IO1DIR 控制LED4低电平点亮
const uint32 LED5 = (1 << 22); //P1.22 IO1DIR 控制LED5低电平点亮
const uint32 LED6 = (1 << 23); //P1.23 IO1DIR 控制LED6低电平点亮
/*key1 UART0 SPI BEEP DAC GPIO口*/
#define UART0 0x05 //P0.0 P0.1控制UART0,发送到PC机显示
#define SPI 0x00005500 //P0.4 P0.5 P0.6 P0.7连接SPI,数码管显示用
#define DAC 2<<18 //P0.25连接到DAC
#define key1 1<<25 //P1.25连接到按键key1
/*AD GPIO口*/
#define AD01 1<<24 //P0.28连接到AD0.1测VOH
#define AD03 1<<28 //P0.30连接到AD0.3测VIH
#define AD05 1<<20 //P0.26连接到AD0.5测IIL
#define AD15 3<<30 //P0.15连接到AD1.5测VIL
#define AD16 2<<10 //P0.21连接到AD1.6测VOL
#define AD17 1<<12 //P0.22连接到AD1.7测IOL
#define UART_BPS 115200 // 通讯波特率115200
#define HC595_CS (1 << 29) // P0.29口为74HC595的片选
uint32 IODIR0;
/*
*******************************************************************************************************
** 函数名称 :DelayNS()
** 函数功能 :长软件延时
** 入口参数 :dly 延时参数,值越大,延时越久
** 出口参数 :无
*******************************************************************************************************
*/
void DelayNS (uint32 dly)
{
uint32 m;
for ( ; dly>0; dly--)
for (m=0; m<5000; m++);
}
/*
*******************************************************************************************************
** 函数名称 :UART0_Init()
** 函数功能 :初始化串口0:波特率115200,8位数据位,1位停止位,无奇偶校验。
** 入口参数 :无
** 出口参数 :无
*******************************************************************************************************
*/
void UART0_Init (void)
{
uint16 Fdiv;
U0LCR = 0x83; // DLAB = 1
Fdiv = (Fpclk / 16) / UART_BPS;
U0DLM = Fdiv / 256;
U0DLL = Fdiv % 256;
U0LCR = 0x03;
}
/*
*********************************************************************************************************
** 函数名称 :UART0_GetByte()
** 函数功能 :从串口接收1字节数据,使用查询方式接收。
** 入口参数 :无
** 出口参数 :接收到的数据
*********************************************************************************************************
*/
uint8 UART0_GetByte (void)
{
uint8 rcv_dat;
while ((U0LSR & 0x01) == 0);
rcv_dat = U0RBR;
rcv_dat0=rcv_dat-48;
return (rcv_dat);
}
/*
*********************************************************************************************************
** 函数名称 :UART0_GetStr()
** 函数功能 :从串口接收
** 入口参数 : s 指向接收数据数组的指针
** n 接收的个数
** 出口参数 : 无
*********************************************************************************************************
*/
void UART0_GetStr (uint8 *s, uint32 n)
{
uint8 i="0";
for ( ; n>0; n--)
{
*s++ = UART0_GetByte();
rcv_buf[i++]=rcv_dat0;
}
biaozhunzhi[0]=(rcv_buf[0]*100+rcv_buf[1]*10+rcv_buf[2]) /100;
biaozhunzhi[1]=(rcv_buf[3]*100+rcv_buf[4]*10+rcv_buf[5]) /100;
biaozhunzhi[2]=(rcv_buf[6]*100+rcv_buf[7]*10+rcv_buf[8]) /100;
biaozhunzhi[3]=(rcv_buf[9]*100+rcv_buf[10]*10+rcv_buf[11])/100;
biaozhunzhi[4]=(rcv_buf[12]*100+rcv_buf[13]*10+rcv_buf[14])/100;
biaozhunzhi[5]=(rcv_buf[15]*100+rcv_buf[16]*10+rcv_buf[16])/100;
}
/*
*******************************************************************************************************
** 函数名称 :UART0_SendByte()
** 函数功能 :向串口发送字节数据,并等待数据发送完毕。
** 入口参数 :data 要发送的数据
** 出口参数 :无
*******************************************************************************************************
*/
void UART0_SendByte (uint8 data)
{
U0THR = data;
while ((U0LSR & 0x40) == 0); // 等待数据发送完毕
}
/*
*******************************************************************************************************
** 函数名称 :PC_DispChar()
** 函数功能 :向PC机发送显示字符。
** 入口参数 :x 显示字符的横坐标
** y 显示字符的纵坐标
** chr 显示的字符,不能为ff
** color 显示的状态,包括前景色、背景色、闪烁位。
** 与DOS字符显示一样:0~3,前景色,4~6,背景色,7,闪烁位。
** 出口参数 :无
*******************************************************************************************************
*/
void PC_DispChar (uint8 x, uint8 y, uint8 chr, uint8 color)
{
UART0_SendByte(0xff); // 起始字符
UART0_SendByte(x);
UART0_SendByte(y);
UART0_SendByte(chr);
UART0_SendByte(color);
}
/*
*******************************************************************************************************
** 函数名称 :ISendStr()
** 函数功能 :向上位机发送字符串。
** 入口参数 :x 显示字符的横坐标
** y 显示字符的纵坐标
** color 显示的状态,包括前景色、背景色、闪烁位。
** 与DOS字符显示一样:0~3,前景色,4~6,背景色,7,闪烁位。
** str 要发送的字符串,以'\0'结束
** 出口参数 :无
*******************************************************************************************************
*/
void ISendStr (uint8 x, uint8 y, uint8 color, char *str)
{
while (1)
{
if (*str == '\0') break; // 结束字符
PC_DispChar(x++, y, *str++, color);
if (x >= 80)
{
x = 0;
y++;
}
}
}
/*
*******************************************************************************************************
** 函数名称:MSPI_Init()
** 函数功能:初始化SPI接口,设置为主机。
** 入口参数:无
** 出口参数:无
********************************************************************************************************
*/
void MSPI_Init(void)
{ IODIR0=IODIR;
IODIR = HC595_CS;
S0PCCR = 0x52; // 设置SPI时钟分频
S0PCR =(0 << 3) | // CPHA = 0, 数据在SCK 的第一个时钟沿采样
(1 << 4) | // CPOL = 1, SCK 为低有效
(1 << 5) | // MSTR = 1, SPI 处于主模式
(0 << 6) | // LSBF = 0, SPI 数据传输MSB (位7)在先
(0 << 7); // SPIE = 0, SPI 中断被禁止
}
/*
*******************************************************************************************************
** 函数名称:MSPI_SendData()
** 函数功能:向SPI总线发送数据。
** 入口参数:data 待发送的数据
** 出口参数:返回值为读取的数据
*******************************************************************************************************
*/
uint8 MSPI_SendData(uint8 data)
{
IOCLR = HC595_CS; // 片选74HC595
SPI_SPDR = data;
while( 0 == (SPI_SPSR & 0x80)); // 等待SPIF置位,即等待数据发送完毕
IOSET = HC595_CS;
return(SPI_SPDR);
}
/* 此表为LED0~F以及L、P的字模 */
uint8 const DISP_TAB[19] = {
// 0 1 2 3 4 5 6 7 8 9
0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8, 0x80,0x90,
// A b C d E F
0x88, 0x83, 0xC6, 0xA1,0x86, 0x8E,
// L P C
0xC7, 0x8C,0xC6 };
/*
*********************************************************************************************************
** 函数名称 :DA ()
** 函数功能 :向端口送出DA值。
** 调试说明 :
*********************************************************************************************************
*/
void DA (void)
{
if(DA_OUT<1023)
{
DA_OUT++;
DACR=(DA_OUT<<6);
}
}
/*
*********************************************************************************************************
** 函数名称 :csh0()
** 函数功能 :测量VIL VIH
** 调试说明 :
*********************************************************************************************************
把各个参数的值存到数组value里,其对应关系如下:
VIL value[0]
VIH value[1]
VOH value[2]
VOL value[3]
IIL value[4]
IOL value[5]
*********************************************************************************************************
*/
void csh0 (void)
{
uint32 data,data1;
DA_OUT=0;
DA();
if(DA_OUT>=240)
{
IO1PIN=(IO1PIN |(0x3f<<18))&(~(1<<19)); //LED2 测量VIH
/*先测AD1.6,将其值作为条件测AD0.3 VIH*/
AD1CR = (1 << 6)|((Fpclk / 1000000 - 1) << 8)|(0 << 16)|(0 << 17)|(1 << 21)|(0 << 22)|(1 << 27)|(1 << 24);
while((AD1DR & (0x80000000) )==0);
data1= (AD1DR >> 6) & 0x3ff; //读取ADC结果,并清除DONE标志位
data1=data1*ad16x;
AD0CR = (1 << 3)|((Fpclk / 1000000 - 1) << 8)|(0 << 16)|(0 << 17)|(1 << 21)|(0 << 22)|(1 << 27)|(1 << 24);
while((AD0DR & (0x80000000) )==0);
if ((data1<=510)&(data1>=490)) //0.5V左右的范围
{
fm2=(fm2+1)%7;
value[fm2-1][1]= data1;
}
}
else
{
IO1PIN=(IO1PIN |(0x3f<<18))&(~(1<<18));//LED1 测量VIL
/*先测AD0.1,将其值作为条件 VIL*/
AD0CR = (1 << 1)|((Fpclk / 1000000 - 1) << 8)|(0 << 16)|(0 << 17)|(1 << 21)|(0 << 22)|(1 << 27)|(1 << 24);
while((AD0DR & (0x80000000) )==0);
data= (AD0DR >> 6) & 0x3ff; //读取ADC结果,并清除DONE标志位
data="data"*ad01x;
AD1CR = (1 << 5)|((Fpclk / 1000000 - 1) << 8)|(0 << 16)|(0 << 17)|(1 << 21)|(0 << 22)|(1 << 27)|(1 << 24);
while((AD1DR & (0x80000000) )==0);
if((data>=2690)&(data<=2710)) //AD0.1 VOH="2".7V为条件 测AD1.5 VIL="0".8V
{
fm1=(fm1+1)%7;
value[fm1-1][0]= data;
//fm1+=1;
}
}
}
/*
*********************************************************************************************************
** 函数名称 :csh1()
** 函数功能 :测量VOH VOL
** 调试说明 :
*********************************************************************************************************
*/
void csh1 (void)
{
uint32 data,data1,data2,data3;
uint16 ddd1,ddd2; //DA输出值
/*AD1.5*k输出VIL=0.8V为条件 测量AD0.1 VOH="2".7V*/
IO1PIN=(IO1PIN |(0x3f<<18))&(~(1<<20)); //LED3 测量VOH
ddd1=165;
loop1: DACR=(ddd1<<6);
DelayNS(1);
AD1CR = (1 << 5)|((Fpclk / 1000000 - 1) << 8)|(0 << 16)|(0 << 17)|(1 << 21)|(0 << 22)|(1 << 27)|(1 << 24);
while((AD1DR & (0x80000000))==0);
data= (AD1DR >> 6) & 0x3ff; //读取ADC结果,并清除DONE标志位
data="data"*ad15x;
if(data<=803)
{ if (data>=797) //判断是否为0.8V
{
DelayNS(1);
AD0CR = (1 << 1)|((Fpclk / 1000000 - 1) << 8)|(0 << 16)|(0 << 17)|(1 << 21)|(0 << 22)|(1 << 27)|(1 << 24);
while((AD0DR & (0x80000000))==0);
data1= (AD0DR >> 6) & 0x3ff; //读取ADC结果,并清除DONE标志位
data1=data1*ad01x;
fm3=(fm3+1)%7;
value[fm3-1][2]= data1;
//fm3+=1;
}
else{
ddd1=(ddd1+1)%1024;
goto loop1;
}
}
else
{
ddd1=(ddd1-1)%1024;
goto loop1;
}
/*AD0.3*k输出VIH=2V为条件 测量AD1.6 VOL="0".5V*/
DelayNS(100);
IO1PIN=(IO1PIN |(0x3f<<18))&(~(1<<21)); //LED4 测量VOL
ddd2=826;
loop2: DACR=(ddd2<<6);
AD0CR = (1 << 3)|((Fpclk / 1000000 - 1) << 8)|(0 << 16)|(0 << 17)|(1 << 21)|(0 << 22)|(1 << 27)|(1 << 24);
while((AD0DR & (0x80000000))==0);
data2= (AD0DR >> 6) & 0x3ff; //读取ADC结果,并清除DONE标志位
data2=data2*ad03x;
if(data2<=2005)
{
if (data2>=1995) //判断是否为2.0V
{
AD1CR = (1 << 6)|((Fpclk / 1000000 - 1) << 8)|(0 << 16)|(0 << 17)|(1 << 21)|(0 << 22)|(1 << 27)|(1 << 24);
while((AD1DR & (0x80000000))==0);
data3= (AD1DR >> 6) & 0x3ff; //读取ADC结果,并清除DONE标志位
data3=data3*ad16x;
fm4=(fm4+1)%7;
value[fm4-1][3]= data3;
//fm4+=1;
}
else { //如果>2.0V
ddd2--;
goto loop2;
}
}
else //<2.0V
{
ddd2++;
goto loop2;
}
}
/*
*********************************************************************************************************
** 函数名称 :csh2()
** 函数功能 :测量IIL IOL
** 调试说明 :
*********************************************************************************************************
*/
void csh2 (void)
{
uint32 data,data1,data2;
uint16 ddd3; //DA输出值
/*AD1.5*k输出VIL=0.4V为条件 测量AD0.5 IIL="-0".4mA*/
DelayNS(100);
IO1PIN=(IO1PIN |(0x3f<<18))&(~(1<<22)); //LED5 测量IIL
ddd3=83;
loop3: DACR=(ddd3<<6);
AD1CR = (1 << 5)|((Fpclk / 1000000 - 1) << 8)|(0 << 16)|(0 << 17)|(1 << 21)|(0 << 22)|(1 << 27)|(1 << 24);
while((AD1DR & (0x80000000))==0);
data=(AD1DR >> 6) & 0x3ff;
data="data"*ad15x;
if(data<=402)
{
if (data>=398) //AD1.5=0.4V为条件 测AD0.5 IIL
{
AD0CR =(1 << 5)|((Fpclk / 1000000 - 1) << 8)|(0 << 16)|(0 << 17)|(1 << 21)|(0 << 22)|(1 << 27)|(1 << 24);
while((AD0DR & (0x80000000))==0);
data1= (AD0DR >> 6) & 0x3ff; //读取ADC结果,并清除DONE标志位
data1=data1*ad05x;
fm5=(fm5+1)%7;
value[fm5-1][4]= (data1-data)/300; //300欧姆 根据实际修改
//fm5+=1;
}
else
{
ddd3--;
goto loop3;
}
}
else
{
ddd3++;
goto loop3;
}
/*测量AD1.7 IOL (硬件)调节电位器使得恒压输出为0.5V*/
IO1PIN=(IO1PIN |(0x3f<<18))&(~(1<<23)); //LED6 测量IOL
DelayNS(2);
AD1CR =(1 << 7)|((Fpclk / 1000000 - 1) << 8)|(0 << 16)|(0 << 17)|(1 << 21)|(0 << 22)|(1 << 27)|(1 << 24);
while((AD1DR & (0x80000000))==0);
data2= (AD1DR >> 6) & 0x3ff; //读取ADC结果,并清除DONE标志位
data2=data2*ad17x;
fm6=(fm6+1)%7;
value[fm6-1][5]= (data2-500)/390; //390欧姆 根据实际修改
//fm6+=1;
}
/*
*******************************************************************************************************
** 函数名称 :bijiao()
** 函数功能 :把存到数组的测量值与标准值相比较,如有错误则发送到value[6]显示
** 调试说明 :
*******************************************************************************************************
*/
void bijiao (void)
{
uint8 i;
uint32 j;
for(i=0;i<6;i++)
{
if(value[0]<biaozhunzhi[0]) //比较第一列,以下逐列比较
{
value[6]=1;
};
if(value[1]>biaozhunzhi[1])
{
value[6]=(value[6])|2;
};
if(value[2]<biaozhunzhi[2])
{
value[6]=(value[6])|4;
};
if(value[3]>biaozhunzhi[3])
{
value[6]=(value[6])|8;
};
j="value"[4];
j="fabs"(j);
if(j>biaozhunzhi[4])
{
value[6]=(value[6])|0x10;
};
if(value[5]<biaozhunzhi[5])
{
value[6]=(value[6])|0x20;
};
for(i=0;i<6;i++)
{ /*存入比较值*/
value[6]=(1&value[6])*100000+(2&value[6])*20000+(4&value[6])*3000+(8&value[6])*400+(0x10&value[6])*50+(0x20&value[6])*6;
}
}
}
/*
*******************************************************************************************************
** 函数名称 :xianshi()
** 函数功能 :把转换值发送到串口以坐标形式显示。
** 调试说明 :在config.h中包含stdio.h
*******************************************************************************************************
*/
void xianshi (void)
{
char str[10];
uint8 i,j;
sprintf (str, " %1d VIL",ay[0]);
ISendStr(1,1, 0x30,str);
DelayNS(10);
sprintf (str, " %1d VIH ",ay[1]);
ISendStr(10,1,0x30,str);
DelayNS(10);
sprintf (str, " %1d VOH ",ay[2]);
ISendStr(20,1,0x30,str);
DelayNS(10);
sprintf (str, " %1d VOL ",ay[3]);
ISendStr(30,1,0x30,str);
DelayNS(10);
sprintf (str, " %1d IIL ",ay[4]);
ISendStr(40,1,0x30,str);
DelayNS(10);
sprintf (str, " %1d IOL ",ay[5]);
ISendStr(50,1,0x30,str);
DelayNS(10);
sprintf (str, " %1d ERR ",ay[6]); //出错标志
ISendStr(60,1,0x30,str);
DelayNS(10);
for(i=1;i<7;i++)
{
for(j=0;j<6;j++)
{
DelayNS(10);
sprintf (str, "%8d",value[i-1][j]*2480/1024);
ISendStr(j*10,i+1,0x30,str);
}
}
for(i=1;i<7;i++)
{
DelayNS(10);
sprintf (str, "%8d",value[i-1][j]);
ISendStr(60,i+1,0x30,str);
}
}
/*
*********************************************************************************************************
** 函数名称 :IRQ_Timer0()
** 函数功能 :定时器0中断服务程序,产生锯齿波
** 入口参数 :无
** 出口参数 :无
*********************************************************************************************************
*/
void __irq IRQ_Timer0 (void)
{
DA_OUT=(DA_OUT+1)%1024;
DACR="DA"_OUT<<6;
T0IR = 0x01; // 清除中断标志
VICVectAddr = 0x00; // 通知VIC中断处理结束
}
/*
*******************************************************************************************************
** 函数名称 :主程序 main()
** 函数功能 :把转换值发送到串口以坐标形式显示。
** 调试说明 :在config.h中包含stdio.h
*******************************************************************************************************
*/
int main (void)
{
char str[10];
uint8 i,j;
uint8 snd[20];
PINSEL0 =0xc0005505; //总的管脚初始化
PINSEL1 =0x11181800;
PINSEL2 =PINSEL2&(~0x08); //0x03ff
IO0DIR =(1<<8)|(1<<9)|(1<<10)|(1<<12)|(1<<13)|(1<<16)|(1<<17)|(1<<18)|(1<<19)|(1<<20)|(1<<23)|(1<<27);
//J1 J2 J3 J4 J5 J6 J7 J8 J9 J10 J11 J12
IO1DIR =(1<<16)|(1<<17)|(1<<18)|(1<<19)|(1<<20)|(1<<21)|(1<<22)|(1<<23)|(1<<24)|(0<<25);
//A0 A1 LED1 LED2 LED3 LED4 LED5 LED6 A2 KEY1
UART0_Init();
chz: for(j=0;j<6;j++)
{
MSPI_Init();
MSPI_SendData(DISP_TAB[j+1]); //数码管显示1,2 ,3,4,5,6
IODIR="IODIR0";
DelayNS(1000);
IO0PIN= a[j][0];
//VICIntEnable =(1 << 4)|(1 << 18);
csh0();
IO0PIN=a[j][1];
csh1(); //测量VOH VOL
IO0PIN=a[j][2];
csh2(); //测量IIL IOL
}
bijiao (); //查询是否存在错误,如有则发送显示
xianshi ();
while(1)
{
/*示波器显示三角波 判断有键则推退出并测量新的芯片*/
T0TC=0;
T0PR = 0; // 分频系数
T0MCR = 0x003; // 设置T1MR0匹配后将T1TC复位,并产生中断标志
T0MR0 = Fpclk/1024/5000; // 定时
T0TCR = 0x03; // 启动并复位T0TC
T0TCR = 0x01; // 启动T0TC
IRQEnable(); // IRQ中断使能
DA();
/* 设置定时器0中断IRQ */
VICIntSelect = 0x00; // 所有中断通道设置为IRQ中断
VICVectCntl0 = 0x20 | 0x04; // 设置定时器0中断通道分配最高优先级
VICVectAddr0 = (uint32)IRQ_Timer0; // 设置中断服务程序地址
T0IR = 0x01; // 清除中断标志
VICIntEnable = 1 << 0x04; // 使能定时器0中断
if((IO1PIN&key1)==0) //等待重做命令
{
goto chz;
}
if((U0LSR & 0x01) == 1)
{
UART0_GetStr(snd,18);
for(i=0;i<18;i++)
{
sprintf (str, "%4d",rcv_buf);
ISendStr(70,i,0x30,str);
}
}
}
return 0;
}
/*********************************************************************************************************
** End Of File
********************************************************************************************************/
用户1224933 2008-2-15 22:23
用户48732 2008-1-24 14:57