中级会员
- 积分
- 373
- 威望
- 248
- 贡献
- 115
- 兑换币
- 10
- 注册时间
- 2011-2-26
- 在线时间
- 5 小时
|
回复 17# xhlove555
………程序的问题?那楼主是怎样实现拍一张图片下来的呢?用串口传输一个特定的数字过去吗?
单片机那边是怎么检测的?用串口中断程序?还是在while()循环里不停的检测?
不过我想应该都没关系的吧?速度都应该很快啊,不至于行数变化的那么大…
呵呵,请楼主帮忙看看我们的程序吧,在此万分感激!
下面是我的程序:(我是在while里判断的)
/************************************超频*****************************/
void SetBusCLK_40M(void)
{
CLKSEL=0X00; //disengage PLL to system
PLLCTL_PLLON=1; //turn on PLL
SYNR =0x40 | 0x04; // SYNDIV + 1 = 5
REFDV=0x80 | 0x01; // REFDIV + 1 = 2
POSTDIV=0x00; //pllclock=2*osc*(1+SYNR)/(1+REFDV)=80MHz;
_asm(nop); //BUS CLOCK=40M
_asm(nop);
while(!(CRGFLG_LOCK==1)); //when pll is steady ,then use it;
CLKSEL_PLLSEL =1; //engage PLL to system;
}
/***************************行场中断初始化************************************/
void vinterruptsinit(void)
{
TSCR1=0x80;//TIMER 定时器使能
TIE =0x00;//禁止中断
TCTL3=0x00;//EDGnB EDGnA 1表示上升沿, 2表示下降沿, 3表示任何沿
TCTL4=0x06;//通道0上升沿触发,通道1下降沿触发
TIOS =0x00;//每一位对应通道的: 0输入捕捉,1输出比较
//TIE_C0I=1;//中断使能
//TIE_C1I=1;//中断使能
}
/************************场中断*************************/
#pragma CODE_SEG __NEAR_SEG NON_BANKED
void interrupt 8 vIC2ISR(void) {
DisableInterrupts;
TFLG1_C0F=1;
if (flag3 == 0x66){
flag3 = 0x33;
row = 0;
line = 0;
TIE_C1I=1; //使能行中断T1使能
}else if(flag3 == 0x33){
flag3 = 0;
flag2 = 0;
flag1 = 1;
flag4 = 0;
TIE =0x00; //关闭两个中断T1,T0
//byzn_Buffer1(); //二值化数组
valve_Buffer1();
uart_SentBuffer1();
}
EnableInterrupts;
}
#pragma CODE_SEG CODE_DEFAULT
/************************行中断*************************/
#pragma CODE_SEG __NEAR_SEG NON_BANKED
void interrupt 9 vIC1ISR(void)
{
TFLG1_C1F=1;
flag4 = 1;
row ++;
line = 0;
href ++;
}
#pragma CODE_SEG CODE_DEFAULT
/************************主函数**************************/
void main(void) {
/* put your own code here */
INT8U ch,i;
DisableInterrupts;
SetBusCLK_40M();
uart_init();
vinterruptsinit();
vIOPortInit();
EnableInterrupts;
while (1){
i = 0;
if(flag1 == 1){
DisableInterrupts;
TIOS =0x00; //关闭场中断
EnableInterrupts;
uart_SentChar(flag2);
uart_SentChar(href/256);
uart_SentChar(href%256);
if(!(href == 0)){
href = 0;
}
flag2 = uart_GetChar();
flag1 = 0;
}
if (flag2 == 0x55){ //如果上位机发送0x55指令,则初始化外部中断,并开始准备向串口传输数据;
TIE_C0I=1; //使能场中断,在场中断中使能行中断
flag3 = 0x66;
flag1 = 1;
}else flag1 = 1;
while (flag2 == 0x55){
while (flag3 == 0x33){ //确定 行中断已经开启,并开始采集数据
while(flag4 == 1) {
while(row <ROW_MAX+1 && line <LINE_MAX-1) {
Buffer1[row-1][line] = PORTB;
line ++;
}
}
}
}
}
/* please make sure that you never leave main */
} |
|