-
大小: 3KB文件類型: .zip金幣: 2下載: 0 次發(fā)布日期: 2021-05-14
- 語言: 其他
- 標(biāo)簽: 電子設(shè)計(jì)??
資源簡介
RS485芯片ESD ±20kV 速率高達(dá)10MBPS 性價(jià)格比極高,有3.3V 5.0V兩種電壓規(guī)格-TDC_Code 使用德國產(chǎn)芯片-TDC-GP2實(shí)現(xiàn)兩路激光信號(hào)時(shí)間差的測(cè)量,實(shí)際項(xiàng)目中使用.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 //內(nèi)部時(shí)鐘分頻
#define?_XTAL_FREQ?4000000UL //定義時(shí)鐘4MHz,用于延時(shí)
/**********************global?variable?definition***************************/
//uchar?disp_data; //存儲(chǔ)數(shù)碼管顯示的全局變量?
uint?time=0; //時(shí)間差
bit?neganum=0; //時(shí)間差數(shù)值正負(fù)標(biāo)志位
/************************function?declaration*******************************/
void?init(); //主機(jī)初始化
void?init_display(); //三位數(shù)碼管顯示初始化
void?display(); //數(shù)碼管顯示函數(shù)?三位顯示時(shí)間差?單位為ns
void?init_TDC(); //TDC初始化(6個(gè)24位寄存器)
uchar?spi_transmit(uchar?data); //SPI數(shù)據(jù)傳輸(啟動(dòng)數(shù)據(jù)傳輸,然后等待發(fā)送結(jié)束,最后返回SSPBUF(讀值時(shí)使用))
uint?read(); //fushu從TDC讀測(cè)量時(shí)間差數(shù)據(jù)
void?write_data(uchar?addruchar?wdata1uchar?wdata2uchar?wdata3); //寫TDC24位寄存器
void?write_opcode(uchar?addr); //向TDC寄存器寫操作命令
uint?invert(uchar?m); //二進(jìn)制轉(zhuǎn)十進(jìn)制函數(shù)
void?bit_display_posi(uchar?m); //位顯示正數(shù)
void?bit_display_nega(uchar?m); //位顯示負(fù)數(shù)
/**********************interrupt?service?code*******************************/
void?interrupt?ISR()
{
if(INTE&&INTF) //RB0外部中斷服務(wù)
{
INTE=0;
INTF=0; //RB0/INT外部中斷標(biāo)志位清零
time=read();
write_opcode(0x70); //發(fā)送“Init”初始化GP2以便TDC能夠繼續(xù)接收Start和Stop信號(hào)
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); //發(fā)送“Init”初始化GP2以便TDC能夠繼續(xù)接收Start和Stop信號(hào)
while(1)
{
CLRWDT(); //喂狗
display();
__delay_us(50);
}
}
void?init() //主機(jī)初始化
{
ADCON1=0x06; //RA口配置為數(shù)字口
TRISA=0x00; //全部作為輸出口
TRISB=0x01; //RB0為中斷輸入口,其他為輸出口
TRISC=0x10; //RC4(SDI)引腳為輸入其他引腳為輸出
OPTION_REG=0x00; //RB0中斷下降沿觸發(fā)
PSA=1; //TIMER0/WDT共用預(yù)分頻器分配給WDT
PS2=1; //128分頻128*18ms大約2.3s
PS1=1;
PS0=1;
//SSPCON=0x22; //00100010,SSPEN=1使能串行端口,CKP=0空閑狀態(tài)時(shí)時(shí)鐘為低電平,主控模式?時(shí)鐘=Fosc/64
//SSPSTAT=0x40; //01000000SMP=0CKE=1
//SPI初始化
SSPEN=1; //使能串行接口,并將SCK,SDO,SDI,SS配置為串行引腳
CKP=0; //空閑時(shí)鐘為低電平
SMP=0; //在數(shù)據(jù)輸出時(shí)間的中間采樣輸入數(shù)據(jù)
CKE=0; //在SCK上升沿傳輸數(shù)據(jù)
SSPM3=SSPM2=SSPM1=SSPM0=0;//SPI主控模式,時(shí)鐘為Fosc/4
SPI_Di(); //初始時(shí)禁止SPI
GIE=1; //開全局中斷
PEIE=1; //使能外部中斷
INTE=1; //RB0/INT外部中斷允許位
}
void?init_display() //三位數(shù)碼管顯示初始化
{
ADCON1=0x06; //RA口配置為數(shù)字口
TRISA=0x00; //全部作為輸出口
TRISB=0x01; //RB0為中斷輸入口,其他為輸出口
TRISC=0x10; //RC4(SDI)引腳為輸入其他引腳為輸出
PORTC=0x07; //三位數(shù)碼管選擇
PORTB=0x00; //數(shù)碼管全亮,顯示0
PORTA=0x23;
}
void?init_TDC() //TDC初始化(寫6個(gè)24位寄存器)
{
write_data(0X000X000X050X10); //start、stop上升沿有效,測(cè)
?屬性????????????大小?????日期????時(shí)間???名稱
-----------?---------??----------?-----??----
?????文件????????7425??2014-10-16?19:07??TDC_Code.c
評(píng)論
共有 條評(píng)論