資源簡介
RS485芯片ESD ±20kV 速率高達10MBPS 性價格比極高,有3.3V 5.0V兩種電壓規格-TDC_Code 使用德國產芯片-TDC-GP2實現兩路激光信號時間差的測量,實際項目中使用.zip

代碼片段和文件信息
/*2013.9
************************************************
**????????Time?measure?using?TDC&PIC16F73????**
************************************************
*/
#include?
#include?
__CONFIG(0x3F36); //開WDT,掉電延遲
#define?uchar?unsigned?char
#define?uint?unsigned?int
#define?SS?RA5
#define?SDO?RC5
#define?SDI?RC4
#define?SCK?RC3
#define?SPI_En()?(RA5=0)
#define?SPI_Di()?(RA5=1)
//#define?Tref?250 //250ns@4MHz
//#define?N?1 //內部時鐘分頻
#define?_XTAL_FREQ?4000000UL //定義時鐘4MHz,用于延時
/**********************global?variable?definition***************************/
//uchar?disp_data; //存儲數碼管顯示的全局變量?
uint?time=0; //時間差
bit?neganum=0; //時間差數值正負標志位
/************************function?declaration*******************************/
void?init(); //主機初始化
void?init_display(); //三位數碼管顯示初始化
void?display(); //數碼管顯示函數?三位顯示時間差?單位為ns
void?init_TDC(); //TDC初始化(6個24位寄存器)
uchar?spi_transmit(uchar?data); //SPI數據傳輸(啟動數據傳輸,然后等待發送結束,最后返回SSPBUF(讀值時使用))
uint?read(); //fushu從TDC讀測量時間差數據
void?write_data(uchar?addruchar?wdata1uchar?wdata2uchar?wdata3); //寫TDC24位寄存器
void?write_opcode(uchar?addr); //向TDC寄存器寫操作命令
uint?invert(uchar?m); //二進制轉十進制函數
void?bit_display_posi(uchar?m); //位顯示正數
void?bit_display_nega(uchar?m); //位顯示負數
/**********************interrupt?service?code*******************************/
void?interrupt?ISR()
{
if(INTE&&INTF) //RB0外部中斷服務
{
INTE=0;
INTF=0; //RB0/INT外部中斷標志位清零
time=read();
write_opcode(0x70); //發送“Init”初始化GP2以便TDC能夠繼續接收Start和Stop信號
INTE=1;
}
}
/************************main?function************************************/?
void?main()
{
__delay_ms(100);
init();
init_display();
write_opcode(0x50); //power?on?reset
__delay_ms(200);
init_TDC(); //初始化TDC
write_opcode(0x07); //發送“Init”初始化GP2以便TDC能夠繼續接收Start和Stop信號
while(1)
{
CLRWDT(); //喂狗
display();
__delay_us(50);
}
}
void?init() //主機初始化
{
ADCON1=0x06; //RA口配置為數字口
TRISA=0x00; //全部作為輸出口
TRISB=0x01; //RB0為中斷輸入口,其他為輸出口
TRISC=0x10; //RC4(SDI)引腳為輸入其他引腳為輸出
OPTION_REG=0x00; //RB0中斷下降沿觸發
PSA=1; //TIMER0/WDT共用預分頻器分配給WDT
PS2=1; //128分頻128*18ms大約2.3s
PS1=1;
PS0=1;
//SSPCON=0x22; //00100010,SSPEN=1使能串行端口,CKP=0空閑狀態時時鐘為低電平,主控模式?時鐘=Fosc/64
//SSPSTAT=0x40; //01000000SMP=0CKE=1
//SPI初始化
SSPEN=1; //使能串行接口,并將SCK,SDO,SDI,SS配置為串行引腳
CKP=0; //空閑時鐘為低電平
SMP=0; //在數據輸出時間的中間采樣輸入數據
CKE=0; //在SCK上升沿傳輸數據
SSPM3=SSPM2=SSPM1=SSPM0=0;//SPI主控模式,時鐘為Fosc/4
SPI_Di(); //初始時禁止SPI
GIE=1; //開全局中斷
PEIE=1; //使能外部中斷
INTE=1; //RB0/INT外部中斷允許位
}
void?init_display() //三位數碼管顯示初始化
{
ADCON1=0x06; //RA口配置為數字口
TRISA=0x00; //全部作為輸出口
TRISB=0x01; //RB0為中斷輸入口,其他為輸出口
TRISC=0x10; //RC4(SDI)引腳為輸入其他引腳為輸出
PORTC=0x07; //三位數碼管選擇
PORTB=0x00; //數碼管全亮,顯示0
PORTA=0x23;
}
void?init_TDC() //TDC初始化(寫6個24位寄存器)
{
write_data(0X000X000X050X10); //start、stop上升沿有效,測
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件????????7425??2014-10-16?19:07??TDC_Code.c
- 上一篇:愛問共享資料器綠色版.rar
- 下一篇:表格模板-學生日常作息時間表.xls
評論
共有 條評論