// DSPIC30F4012 Configuration Bit Settings
// 'C' source line config statements
// FOSC
#pragma config FPR = ECIO_PLL16 // Primary Oscillator Mode (ECIO w/ PLL 16x)
#pragma config FOS = PRI // Oscillator Source (Primary Oscillator)
#pragma config FCKSMEN = CSW_FSCM_OFF // Clock Switching and Monitor (Sw Disabled, Mon Disabled)
// FWDT
#pragma config FWPSB = WDTPSB_16 // WDT Prescaler B (1:16)
#pragma config FWPSA = WDTPSA_512 // WDT Prescaler A (1:512)
#pragma config WDT = WDT_OFF // Watchdog Timer (Disabled)
// FBORPOR
#pragma config FPWRT = PWRT_64 // POR Timer Value (64ms)
#pragma config BODENV = BORV27 // Brown Out Voltage (2.7V)
#pragma config BOREN = PBOR_ON // PBOR Enable (Enabled)
#pragma config LPOL = PWMxL_ACT_HI // Low-side PWM Output Polarity (Active High)
#pragma config HPOL = PWMxH_ACT_HI // High-side PWM Output Polarity (Active High)
#pragma config PWMPIN = RST_IOPIN // PWM Output Pin Reset (Control with PORT/TRIS regs)
#pragma config MCLRE = MCLR_EN // Master Clear Enable (Enabled)
// FGS
#pragma config GWRP = GWRP_OFF // General Code Segment Write Protect (Disabled)
#pragma config GCP = CODE_PROT_OFF // General Segment Code Protection (Disabled)
// FICD
#pragma config ICS = ICS_PGD // Comm Channel Select (Use PGC/EMUC and PGD/EMUD)
// #pragma config statements should precede project file includes.
// Use project enums instead of #define for ON and OFF.
#include <xc.h>
/*************************************************************************************
* 测试硬件平台: Dspic30f4012
* 用途: TCD1208AP 线性CCD模块使用例程
* 引脚连接:
* //PORT_B8= 1; --ad端口输入
* //PORT_B9= 1; --ad端口输入
* PORT_E1= 0; --SH输出
* PORT_E2= 0; --F1输出
* PORT_E3= 0; --F2输出
* PORT_E4= 0; --RS输出
* 串口实时输出显示:
* //PORT_C13 --TXD
* //PORT_C14 --RXD
*
* 参数设置:
* PRINT_AD --设置串口打印数据的类型,二值量或模拟量
* THRESHOLD --设置模拟量转二值量的阈值
* WINDOW_WIDTH--设置串口打印采集数据的宽度
*
* FRS=0.11MHZ 2017.08.06 BY Lee
**************************************************************************************/
#include "p30f4012.h" /* common defines and macros */
//------------------------------ Define ----------------------------------------
#define _ISRoutine __attribute__((interrupt,auto_psv)) // 中断向量定义
#define FOSC 7500000 // 晶振频率
#define PLL 16 // PLL倍频系数
#define FCY (FOSC*PLL/4) // 系统时钟源频率33.91ns
//#define _CHPS ADCON2bits.CHPS
//#define Nop() {__asm__ volatile ("nop");}
//#define NOP() {__asm__ volatile ("nop");}
#define RESET() {__asm__ volatile ("reset");} // 软件复位定义
#define uchar unsigned char
#define uint unsigned int
#define TCD1208AP_SH _LATE0 //SH输出
#define TCD1208AP_F1 _LATE1 //F1输出
#define TCD1208AP_F2 _LATE2 //F2输出
#define TCD1208AP_RS _LATE3 //RS输出
void Delay(uint Delay_m);
void IO_Init(void);
void ADC_Init(void);
void UART0_Init(void);
void Interrupt_Init(void);
void _ISRoutine _U1RXInterrupt(void);
void Initial_SPI(void);
void Lesear_Position_centroid(void);
unsigned int FLAG_LASER_POSITION=0x55,U1RX_Receive_Type=0;
unsigned int Lesear_Position=0;//定位激光图像质心位置。
unsigned int AD_Value[1000];
///////////////////////
void Delay200ns(void)
{
//Nop();
}
////////////////////////////
void Delay400ns(void)
{
Nop();Nop();Nop();Nop();Nop();
}
///////////////////////////
void Delay500ns(void)
{
Nop();Nop();Nop();Nop();Nop();Nop();Nop();Nop();
}
///////////////////////////
//***************************** -Main- ***************************************//
//描述:程序主函数,程序从此开始执行
//名称:TCD1208AP驱动时序,及AD采样与SPI同信
//作者:高佳篷、贾爱亭
//时间:2018-07-05(完成)
//****************************************************************************//
int main(void)
{
IO_Init();
ADC_Init();
UART0_Init();
Interrupt_Init();
Initial_SPI();
uint i=0;
Initial_SPI();
while(1)
{
///////
TCD1208AP_RS = 1;Nop();
TCD1208AP_RS = 0;TCD1208AP_F1 = 1;TCD1208AP_F2=0;
///////////////////
TCD1208AP_SH = 1;Delay500ns();Delay500ns();TCD1208AP_SH = 0; //曝光时间500ns
///////////////////
while(1)
{
//1
TCD1208AP_RS = 1;Nop();
TCD1208AP_RS = 0;Delay200ns();TCD1208AP_F1 = 1;TCD1208AP_F2=0;_SAMP=1;i++;Delay400ns();Nop();AD_Value[i]=ADCBUF0;
TCD1208AP_RS = 1;Nop();
TCD1208AP_RS = 0;TCD1208AP_F1 = 0;TCD1208AP_F2=1;Delay500ns();
TCD1208AP_RS = 1;Nop();
TCD1208AP_RS = 0;Delay200ns();TCD1208AP_F1 = 1;TCD1208AP_F2=0;_SAMP=1;i++;Delay400ns();Nop();AD_Value[i]=ADCBUF0;
TCD1208AP_RS = 1;Nop();
TCD1208AP_RS = 0;TCD1208AP_F1 = 0;TCD1208AP_F2=1;Delay500ns();
//2
TCD1208AP_RS = 1;Nop();
TCD1208AP_RS = 0;Delay200ns();TCD1208AP_F1 = 1;TCD1208AP_F2=0;_SAMP=1;i++;Delay400ns();Nop();AD_Value[i]=ADCBUF0;
TCD1208AP_RS = 1;Nop();
TCD1208AP_RS = 0;TCD1208AP_F1 = 0;TCD1208AP_F2=1;Delay500ns();
TCD1208AP_RS = 1;Nop();
TCD1208AP_RS = 0;Delay200ns();TCD1208AP_F1 = 1;TCD1208AP_F2=0;_SAMP=1;i++;Delay400ns();Nop();AD_Value[i]=ADCBUF0;
TCD1208AP_RS = 1;Nop();
TCD1208AP_RS = 0;TCD1208AP_F1 = 0;TCD1208AP_F2=1;Delay500ns();
//3
TCD1208AP_RS = 1;Nop();
TCD1208AP_RS = 0;Delay200ns();TCD1208AP_F1 = 1;TCD1208AP_F2=0;_SAMP=1;i++;Delay400ns();Nop();AD_Value[i]=ADCBUF0;
TCD1208AP_RS = 1;Nop();
TCD1208AP_RS = 0;TCD1208AP_F1 = 0;TCD1208AP_F2=1;Delay500ns();
TCD1208AP_RS = 1;Nop();
TCD1208AP_RS = 0;Delay200ns();TCD1208AP_F1 = 1;TCD1208AP_F2=0;_SAMP=1;i++;Delay400ns();Nop();AD_Value[i]=ADCBUF0;
TCD1208AP_RS = 1;Nop();
TCD1208AP_RS = 0;TCD1208AP_F1 = 0;TCD1208AP_F2=1;Delay500ns();
//4
TCD1208AP_RS = 1;Nop();
TCD1208AP_RS = 0;Delay200ns();TCD1208AP_F1 = 1;TCD1208AP_F2=0;_SAMP=1;i++;Delay400ns();Nop();AD_Value[i]=ADCBUF0;
TCD1208AP_RS = 1;Nop();
TCD1208AP_RS = 0;TCD1208AP_F1 = 0;TCD1208AP_F2=1;Delay500ns();
TCD1208AP_RS = 1;Nop();
TCD1208AP_RS = 0;Delay200ns();TCD1208AP_F1 = 1;TCD1208AP_F2=0;_SAMP=1;i++;Delay400ns();Nop();AD_Value[i]=ADCBUF0;
TCD1208AP_RS = 1;Nop();
TCD1208AP_RS = 0;TCD1208AP_F1 = 0;TCD1208AP_F2=1;Delay500ns();
//5
TCD1208AP_RS = 1;Nop();
TCD1208AP_RS = 0;Delay200ns();TCD1208AP_F1 = 1;TCD1208AP_F2=0;_SAMP=1;i++;Delay400ns();Nop();AD_Value[i]=ADCBUF0;
TCD1208AP_RS = 1;Nop();
TCD1208AP_RS = 0;TCD1208AP_F1 = 0;TCD1208AP_F2=1;Delay500ns();
TCD1208AP_RS = 1;Nop();
TCD1208AP_RS = 0;Delay200ns();TCD1208AP_F1 = 1;TCD1208AP_F2=0;_SAMP=1;i++;Delay400ns();Nop();AD_Value[i]=ADCBUF0;
TCD1208AP_RS = 1;Nop();
TCD1208AP_RS = 0;TCD1208AP_F1 = 0;TCD1208AP_F2=1;Delay500ns();
//6
TCD1208AP_RS = 1;Nop();
TCD1208AP_RS = 0;Delay200ns();TCD1208AP_F1 = 1;TCD1208AP_F2=0;_SAMP=1;i++;Delay400ns();Nop();AD_Value[i]=ADCBUF0;
TCD1208AP_RS = 1;Nop();
TCD1208AP_RS = 0;TCD1208AP_F1 = 0;TCD1208AP_F2=1;Delay500ns();
TCD1208AP_RS = 1;Nop();
TCD1208AP_RS = 0;Delay200ns();TCD1208AP_F1 = 1;TCD1208AP_F2=0;_SAMP=1;i++;Delay400ns();Nop();AD_Value[i]=ADCBUF0;
TCD1208AP_RS =
评论0