⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ad4360.c

📁 89C516RD+的两个AD转换程序,89C51是22.1184MHZ,有64KB Flash 256B(DataRAM)+1024B(Ext.RAM)的性价比很高的MCU
💻 C
📖 第 1 页 / 共 2 页
字号:
#include "def4360.h"
#include "lthal.h"
#include "l4360ci.h"
//#include "ctype.h"
//#include "ltprotodma.h"
// STC89C516RD@22.1184MHz	64KB Flash 256B(DataRAM)+1024B(Ext.RAM)
// 24MHz,33MHz
// UART+SPI
// P1.0      ADF4360:CLK
// P1.1      ADF4360:DATA
// P1.2      ADF4360:PGM,Latch
// P1.3      IC-CARD:RST
// P1.4      IC-CARD:FUS
// P1.5						IC-CARD:PWR
// P1.6      IC-CARD:CheckIn
// P1.7      NC
// P3.0      USB芯片PDIUSBD12:CS(RXD)
// P3.1      USB芯片PDIUSBD12:SA0(TXD)
// P3.2      USB芯片PDIUSBD12:INT(INT0)
// P3.3      RUNLED(INT1)
// P3.4      USB芯片PDIUSBD12:RST(T0)
// P3.5      USB芯片PDIUSBD12:SUSPEND(T1)
// P3.6      SWR
// P3.7      SRD
//=====================================
// Error No.
// 0x30 : Ok
bit CommandFlag ;
bit MainRxDone ;
bit MainTxDone ;
bit MainRxFlag ;
bit CurrentFlag ;
bit RecivedHead ;
#define DataHead  0xa5
#define StartTest 0x00
#define StopTest  0x01
#define Fosc          22118400
#define BAUDRATE      19200


sfr AUXR_89C516 = 0x8e ;
sfr WDT_CONTR   = 0xe1 ;

unsigned char code MyDateStr[] = __DATE2__ ;
unsigned char code MyTimeStr[] = __TIME__ ;
#define SoftWareVer 0x0100

unsigned char idata MainTxLength ;
//unsigned char idata MainTxIndex ;

unsigned char xdata coma_count_rxd , coma_count_txd , coma_max_count_txd ;
unsigned char xdata RxdHead , RxdEnd ;
unsigned char xdata coma_rxd_buff [ 128 ] ; // 循环队列
unsigned char xdata coma_txd_buff [ 10 ] ;
unsigned char xdata CurResult [10] ;
unsigned char xdata CurIndex ;
unsigned int data m1 ;
extern unsigned char idata TimerForICcard ;

unsigned int idata counter ;
unsigned char data freqno ;

// USB standard device requests
// USB 标准设备请求入口地址表
void get_status(void);
void clear_feature(void);
void set_feature(void);
void set_address(void);
void get_descriptor(void);
void get_configuration(void);
void set_configuration(void);
void get_interface(void);
void set_interface(void);

void reserved(void);

// DMA
void read_write_register(void);


extern void _nop_ ( void ) ;
extern void OutFreq ( unsigned char FreqNo ) ;

unsigned char code InvalidCmd [16]= { "Invalid Command!" } ;
unsigned char code ErrorCheck [16]= { "Error Of Check !" } ;

unsigned char idata mi ;
// 卡上存储的ID格式:3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,1,2
// 即高两位被存放在20个字符数组中的最后两个单元,方便与以前的便携程序兼容

// 函数指针数组,标准设备请求
code void (*StandardDeviceRequest[])(void) =
{
	get_status,          // 获取D12状态
	clear_feature,       // 清除特性
	reserved,            // 保留
	set_feature,         // 设置特性
	reserved,            // 保留
	set_address,         // 设置地址
	get_descriptor,      // 获取描述符
	reserved,            // 保留
	get_configuration,   // 获取配置
	set_configuration,   // 设置配置
	get_interface,       // 获取接口信息
	set_interface,       // 设置接口
	reserved,            // 保留
	reserved,            // 保留
	reserved,            // 保留
	reserved             // 保留
};
// 用户厂商请求程序入口地址表
code void (*VendorDeviceRequest[])(void) =
{
	reserved,            // 保留
	reserved,            // 保留
	reserved,            // 保留
	reserved,            // 保留
	reserved,            // 保留
	reserved,            // 保留
	reserved,            // 保留
	reserved,            // 保留
	reserved,            // 保留
	reserved,            // 保留
	reserved,            // 保留
	reserved,            // 保留
	read_write_register, // 厂商请求处理
	reserved,            // 保留
	reserved,            // 保留
	reserved             // 保留
};
//  公共静态数据
//extern EPPFLAGS bEPPflags;

//extern bit bEPPflags_timer ;
extern bit bEPPflags_in_isr ;
extern bit bEPPflags_ep1_rxdone ;
extern bit bEPPflags_bus_reset ;
extern bit bEPPflags_suspend ;
extern bit bEPPflags_setup_packet ;
extern bit bEPPflags_remote_wakeup ;
extern bit bEPPflags_configuration ;
extern bit bEPPflags_verbose ;
extern bit bEPPflags_power_down ;

extern unsigned char idata bEPPflags_control_state ;
extern unsigned char idata bEPPflags_setup_dma ;
extern unsigned char idata bEPPflags_dma_state ;

//extern unsigned long ClockTicks;

extern unsigned char idata GenEpBuf[];
extern unsigned char idata GenEpBufToHost[];
extern IO_REQUEST idata ioRequest;

extern unsigned char ioSize, ioCount;
extern unsigned char xdata MainEpBuf[];
extern unsigned char idata EpBuf[];

CONTROL_XFER ControlData;
unsigned char bNoRAM;

//==================================================
//  PCON:		SMOD | - | - | - | GF1|GF0|PD |IDL|
//  TCON:		TF1  | - |TF0| - |IE1 |IT1|IE0|IT0|
// Configure Timer 0
//   - Mode                        = 1
//   - Interrupt                   = ENABLED
//   - Clock Source                = INTERNAL
//   - Enable Gating Control       = DISABLED
void init_timer0(void)
{
	TMOD &= 0xF0 ;                // clear Timer 0
	TMOD  |= 0x01 ;
	TL0 = 0xee;                   // value set by user 2.5 ms@22.1184MHz
	TH0 = 0x00;                   // value set by user
	ET0 = 1;     		               // IE.1
	TR0 = 1;                      // TCON.4 start timer
	PT0 = 1;
}
void uart_int ( void ) interrupt 4
 {
  if ( RI )
  {
   coma_rxd_buff [ RxdHead ++ ] = SBUF ;
			RxdHead &= 0x7f ;
   RI = 0 ;
  }
  if ( TI )
  { 
   TI = 0 ;
   if ( coma_count_txd < coma_max_count_txd )
    SBUF = coma_txd_buff [ coma_count_txd ++ ] ;
   else
	  {
	   coma_count_txd = 0x00 ;
    coma_max_count_txd = 0x00 ;
   }
  }
 }
void init_port()
{
	P0 = 0xFF;
	P1 = 0x00 ;         // 0xFF safe for IcCard ;
	P2 = 0xFF;
	P3 = 0xF7;
	MCU_D12CS = False ;	    //D12 Select
	D12SUSPD = False ;		    //D12 not in Suspend
}
//Serial Port
//Mode                       = 1  /8-bit UART
//Serial Port Interrupt      = Disabled
//Receive            = Enabled
//Auto Addressing    = Disabled
void init_serial(void)	// SST89E564
{
	SCON = 0x50;		      // SCON:   SM0|SM1|SM2|REN| TB8|RB8| TI|RI
	PCON = 0x80;       	// PCON: SMOD | - | - | - | GF1|GF0| PD|IDL|
	TMOD = 0x20;		      // TMOD: GATE |C/T| M1| M0|GATE|C/T| M1|M0
	TCON = 0x69;    	   // TCON:   TF1|TR1|TF0|TR0| IE1|IT1|IE0|IT0
//	TH1 = 0xf3;		     // TH1=0xF3:
	 TH1 = - ( Fosc / 12 / 16 / BAUDRATE ) ;
 	TR1 = True ;
 	ES  = True ;
}
//=================================================================
void disconnect_USB(void)    // 断开USB连接
{
   D12_SetMode(D12_NOLAZYCLOCK|D12_CLOCKRUNNING, D12_SETTOONE | D12_CLOCK_12M);
//   D12_SetMode( 0x00 , 0x00 ) ;  //教科书
}

void connect_USB(void)       // 连接USB
{
	DISABLE;                    // 关中断
//	bEPPflags.value = 0;        // reset event flags

//  bEPPflags_timer = 0 ;
  bEPPflags_bus_reset = 0 ;
  bEPPflags_suspend = 0 ;
  bEPPflags_setup_packet = 0 ;
  bEPPflags_remote_wakeup = 0 ;
  bEPPflags_in_isr = 0 ;
  bEPPflags_configuration = 0 ;
  bEPPflags_verbose = 0 ;
  bEPPflags_ep1_rxdone = 0 ;
  bEPPflags_power_down = 0 ;
  bEPPflags_control_state = 0 ;
  bEPPflags_setup_dma = 0 ;
  bEPPflags_dma_state = 0 ;
 ENABLE;                     // 开中断
	D12_SetEndpointStatus(4, 0);// 设置端点状态 l8624ci.c
	D12_SetEndpointStatus(5, 0);// 设置端点状态 l8624ci.c
// V2.1 enable normal+sof interrupt
	D12_SetDMA(D12_ENDP4INTENABLE | D12_ENDP5INTENABLE); // l8624ci.c
// Initialize D12 configuration
	D12_SetMode(D12_NOLAZYCLOCK |D12_CLOCKRUNNING|D12_SOFTCONNECT,D12_SETTOONE | D12_CLOCK_12M );
// l8624ci.c
}
void reconnect_USB(void)        // 重新连接USB
{
//	unsigned long clk_cnt;
//	RunLed = 1;
// Pull-down D12's SUSPEND pin
// Disable 74HCT123 pulse generation before disconnect
// Release D12's SUSPEND pin after receiving bus reset from host
	D12SUSPD = 0;
	disconnect_USB();
	ENABLE;
//printf("Wait for 1 second ...\n");
//	clk_cnt = ClockTicks;
//	while(ClockTicks < clk_cnt + 20) _nop_ ( ) ; // 延时
 TimerForICcard = 0x00 ;
	while(TimerForICcard < 200 ) _nop_ ( ) ; // 延时
 TimerForICcard = 0x00 ;
	while(TimerForICcard < 200 ) _nop_ ( ) ; // 延时
	DISABLE;
	connect_USB();                               // 连接USB
//	RunLed = 1;
}
//------------------------------
void stall_ep0(void)
{
	D12_SetEndpointStatus(0, 1);
	D12_SetEndpointStatus(1, 1);
}
//------------------------------
// 进入地址状态,禁止0除外的所有端点
void init_unconfig(void)
 {
   D12_SetEndpointEnable(0) ;
 }
// 配置处理,允许端点收发
void init_config(void)
 {
   D12_SetEndpointEnable(1) ;
 }
// 通过端点索引1发送数据(DATA类型)
void single_transmit(unsigned char * buf, unsigned char len)
 {
  if( len <= EP0_PACKET_SIZE)
   {
   	D12_WriteEndpoint(1, len, buf);
   }																	 
 }
// 通过端点索引1发送数据(CODE类型)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -