金牌会员
金牌会员
- 积分
- 1704
- 威望
- 352
- 贡献
- 940
- 兑换币
- 4
- 注册时间
- 2010-10-25
- 在线时间
- 206 小时
|
#include <hidef.h> /* common defines and macros */
#include "derivative.h" /* derivative-specific definitions */
#define ROW_VALUE 40
#define COLUMN_VALUE 80
#define hang_space 5
unsigned char image[ROW_VALUE][COLUMN_VALUE]; //用于摄像头采集的二维数组
unsigned int hang_counter=0; //记录行中断次数
unsigned int i_counter=0;
unsigned int j_counter=0;
/************时钟初始化***********/
void PLL_init(void)
{
CLKSEL = 0X00; //disengage PLL to system
PLLCTL_PLLON = 1; //turn on PLL
SYNR = 3; //SYDIV=0X18=24
REFDV=1; //REFDIV=0X07=7
POSTDIV = 0x00; //pllclock=2*osc*(1+SYDIV)/(1+REFDIV)=64MHz;
_asm(nop); //BUS CLOCK=32M
_asm(nop);
_asm(nop);
_asm(nop);
_asm(nop);
_asm(nop);
_asm(nop);
_asm(nop);
_asm(nop);
_asm(nop);
_asm(nop);
_asm(nop);
_asm(nop);
while(!(CRGFLG_LOCK==1)); //when pll is steady ,then use it;
CLKSEL_PLLSEL = 1; //engage PLL to system;
}
/***********延时程序*******/
void delay(unsigned int i) //延迟(5/8)*i个us 16M
{
unsigned int j=10;
while(i--)
{
while(j--)
{
;
}
}
}
/************外部AD(8M,PP7口)***********/
void ADP_init(void)
{
PWME=0X00; //允许寄存器,PWM信号关闭
PWMCAE_CAE7=0; //居中对齐寄存器,选择输出模式为左对齐输出模式
PWMCNT7=0; //通道计数寄存器,计数器清0
PWMPOL_PPOL7=1; //极性寄存器,先输出高电平,计数到DTY时,反转电平
PWMPER7=2; //周期寄存器
PWMDTY7=1; //占空比寄存器
PWMCLK=0x00; //时钟选择寄存器,选中7通道为clockB
PWMPRCLK=0x11; //预分频时钟寄存器 ,2分频=8Mhz
PWME=0x80; //使能PP7口
}
/**************串口初始化*****************/
void SCI_init(void)
{
SCI0BD=208; //9600bps Baud Rate=BusClock/(16*SCIBD)
SCI0CR1=0; //正常8位模式,无奇偶校验
SCI0CR2=0X2C; //发送允许 接受中断允许
}
/************写SCI数据*******************/
void SciWrite(unsigned char sendchar)
{
while (!(SCI0SR1&0x80));
SCI0DRH=0;
SCI0DRL=sendchar;
}
/************ECT初始化*********/
void ECT_init(void)
{
TIOS=0x00; //外部输入捕捉1,2通道
TCTL4=0x24; //通道1为上升沿触发,通道2为下降沿触发
TSCR1=0x80;//定时器正常工作
TIE_C2I=1;//场中断允许
TIE_C1I=1;//行中断允许
}
void main(void)
{
PLL_init();
SCI_init();
ECT_init();
ADP_init();
EnableInterrupts;
for(;;)
{
SciWrite(image[i_counter][j_counter]);
} /* loop forever */
/* please make sure that you never leave main */
}
#pragma CODE_SEG __NEAR_SEG NON_BANKED //指示该程序在不分页区
/*************中断函数*************/
void interrupt 9 Port1_interrupt(void) //行中断
{
TFLG1_C1F=1; //清中断标志位
hang_counter++; //记录行中断次数
delay(20); //延时8us,每行的前7us为无效信号
for(i_counter=0;i_counter<ROW_VALUE;j_counter++)
for(j_counter=0;j_counter<COLUMN_VALUE;j_counter++)
{
image[i_counter][j_counter]=PORTB; //从B口中获取AD转换后的数据
}
}
void interrupt 10 Port2_interrupt(void) //场中断
{
TFLG1_C2F=1; //清除场中断标志
j_counter=0;
if(hang_counter>24)
{
i_counter=0;
}
}
我用串口看传回的数据,可啥都没,不知啥问题,望给与解答! |
|