智能仪表试验Word文件下载.docx
《智能仪表试验Word文件下载.docx》由会员分享,可在线阅读,更多相关《智能仪表试验Word文件下载.docx(28页珍藏版)》请在冰豆网上搜索。
}
/*****************中断服务子程序声明与定义********************/
interruptvoidnothing()//哑中断子程序
return;
/**************************主程序*****************************/
voidmain(void)
{
sys_ini();
for(;
;
)
{
delay();
/*xf管脚置低*/
clrcxf"
/*xf管脚置高*/
setcxf"
}
/***************************结束******************************/
实验一2
/*******************函数、子程序声明与定义********************/
inti;
volatileunsignedint*room=(volatileunsignedint*)0x0060;
volatileunsignedint*room2=(volatileunsignedint*)0x006F;
/*将0xAAAA写入从数据空间的地址0x0060开始的8个单元中*/
for(i=0;
i<
8;
i++)
*room=0xAAAA;
room++;
}
/*从0x0060开始的8个空间读出数据依次写入从0x0068开始的8个单元中*/
{
*room2=*(room-1);
room--;
room2--;
程序3
ioportshortport8000;
//输入端口地址定义
ioportshortport8001;
//输出端口地址定义
/*************************************************************/
/*将io空间的8000地址的值赋予io空间的8001地址*/
port8001=port8000;
程序4
/********************全局变量定义与初始化*********************/
unsignedintnum=0;
unsignedintshow=0x00AA;
/*配置时钟锁相为4倍频CLKOUT=4*10=40M*/
*SCSR1=0x81FE;
/*清除所有中断标志,"
写1清0"
*/
*IFR=0xFFFF;
voidtimer1_ini()//定时器1初始化子程序
/*使能int2中断*/
*IMR=0x0002;
/*使能T1PINT中断*/
*EVAIMRA=0x0080;
/*清EVA中断标志*/
*EVAIFRA=0xFFFF;
/*约1ms产生一次中断*/
*T1PER=0x01CD;
/*计数器清零*/
*T1CNT=0x0000;
/*连续增计数模式,预分频为64,定时器计时使能,内部时钟,定时器1比较使能*/
*T1CON=0x164C;
/*开总中断*/
clrcINTM"
interruptvoidtimer1()//定时器1中断子程序
/*记中断次数1000次,产生1秒延时*/
if(num==1000)
num=0;
/*显示值取反*/
show=~show;
elsenum++;
/*计数器清零*/
/*清EVA中断标志*/
//**************************主程序*****************************/
timer1_ini();
/*将欲显示值赋予io空间的8000地址*/
port8001=show;
程序5
unsignedintshow=0x00aa;
//定义欲显示值
//*******************函数、子程序声明与定义********************/
voidxint2_ini()//外部中断2初始化子程序
/*使能int1中断*/
*IMR=0x0001;
/*使能xint2中断,上升沿有效,高优先级,清xint2中断标志*/
*XINT2CR=0x8005;
/*开总中断*/
interruptvoidxint2()//外部中断2中断子程序
/*使能xint2中断,上升沿有效,高优先级,清xint2中断标志*/
xint2_ini();
程序6
unsignedinti=0;
unsignedintpoint[256];
unsignedintpoint1[256];
/*配置时钟锁相为4倍频CLKOUT=4*10M=40M,使能ADC时钟*/
*SCSR1=0x0081;
/*io、ram、program都设为0等待读写*/
WSGR=0x0000;
/*使能cpu中断1*/
voidadc_ini()//ADC初始化子程序
/*仿真器挂起时,完成最后一次ad,连续运行模式
预定标最长,高优先级中断,双排序模式,禁用其他模式*/
*ADCTRL1=0x2CC0;
/*立即中断模式,清中断标志*/
*ADCTRL2=0x0602;
/*启用排序器1,最大转换数为2*/
*MAXCONV=0x0001;
/*选择模拟输入通道为4、5通道*/
*CHSELSEQ1=0x0054;
//开总中断
interruptvoidad()
point[i]=(*RESULT0>
>
6);
//读出ad结果
point1[i]=(*RESULT1>
i++;
if(i==256)
i=0;
*ADCTRL2|=0x0200;
//清除ad中断标志
adc_ini();
*ADCTRL2|=0x2000;
//软件启动ad转换
程序7
ioportunsignedport8008;
//定义AD7822的地址
unsignedintdata[256];
unsignedintj=0;
/*配置时钟锁相为4倍频CLKOUT=4*10M=40M*/
*SCSR1=0x0041;
/*io、ram、program都设为1等待读写*/
WSGR=0x0649;
}/*****************中断服务子程序声明与定义********************/
/*启动ad7822*/
/*等待转化完成*/
nop"
data[j]=port8008&
0x00FF;
//读取数据
j++;
if(j==255)
j=0;
程序8
/************************文件预处理***************************/
math.h"
#definepi3.1415926
unsignedintdata=0;
unsignedintcurve[128];
unsignedintcurve1[128];
unsignedintcurve2[128];
/*CLKIN=10M,CLKOUT=40M,使能spi外围模块*/
*SCSR1=0x0021;
/*使能spi引脚*/
*MCRB=0xFE3F;
voidspi_ini()//spi初始化子程序
/*复位spi*/
*SPICCR&
=0x007F;
/*CLOCKPOLARITY=0,16位数据格式*/
*SPICCR=0x000F;
/*禁止溢出中断,CLOCKPHASE=1,禁用spi中断,主模式,使能数据发送*/
*SPICTL=0x000E;
/*清除接收溢出中断标志*/
*SPISTS=0x0080;
/*波特率为40/4=10M*/
*SPIBRR=0x0000;
/*启动spi工作*/
*SPICCR|=0x0080;
voiddelay()//延时子程序
5;
voidmain()
inti,p,data;
spi_ini();
for(i=0;
i<
128;
/*产生128个点的正弦信号波形*/
data=(int)(127.5*(1+sin(2*pi*i/127)));
curve[i]=data;
/*将数据打包成“从移位寄存器到DACA数据寄存器*/
curve1[i]=data&
0x00ff|0x0100;
/*将数据打包成“从移位寄存器到DACB数据寄存器
且用数据寄存器同时更新A和B两个DA的值*/
curve2[i]=data&
0x00ff|0x2500;
for(p=0;
p<
p++)
/*将数据写入AD7303*/
*SPITXBUF=curve1[p];
*SPITXBUF=curve2[p];
程序9
//********************全局变量定义与初始化*********************/
unsignedintp;
charsend_buff=0x00;
charrece_buff=0x00;
unsignedintdata_buff=0x0000;
/*CLKIN=10M,CLKOUT=40M,使能evb外围模块*/
*SCSR1=0x0008;
/*将iope1,2,3配置为输出脚,且iope3初始值为0,iope1,iope2初始值为1*/
*PEDATDIR=0x0E06;
/*将iopf6配置为输出脚,且iopf6初始值为1*/
*PFDATDIR=0x4040;
voidpdpintb_ini()//int1中断初始化子程序
/*清除所有中断标志*/
/*使能中断1*/
/*清除pdpintb中断标志*/
*EVBIFRA=0xFFFF;
/*使能pdpintb中断*/
*EVBIMRA=0x0001;
voiddelay_8us()//延时8us子程序
unsignedinti;
2;
i++);
voiddelay_50us()//延时50us子程序
unsignedintj;
for(j=0;
j<
25;
j++);
voiddelay_25ms()//延时25ms子程序
12500;
voiddelay_long