51单片机各类源程序集锦

源代码在线查看: isr.c

软件大小: 3620 K
上传用户: leihongcetc
关键词: 51单片机 源程序 集锦
下载地址: 免注册下载 普通下载 VIP

相关代码

				/*
				   //*************************************************************************
				   //
				   //                  		ZLGMCU
				   //				www.zlgmcu.com
				   // File Name:	ISR.C
				   // Revision:		V0.2(2002-04-08)
				   // Use library:  	USB51S.LIB
				   // Note:		USB51S.LIB不带DMA控制功能
				   //*************************************************************************
				   */
				
				#include 
				#include 
				#include                 /* special function register declarations   */
				#include "isr.h"
				#include "mainloop.h"
				#include "protozlg.h"
				
				/*
				//*************************************************************************
				//  Public static data
				//*************************************************************************
				*/
				
				EPPFLAGS bEPPflags;
				CONTROL_XFER ControlData;
				
				/* ISR static vars */
				unsigned char idata GenEpBuf[EP1_PACKET_SIZE];
				unsigned char idata EpBuf[EP2_PACKET_SIZE];
				IO_REQUEST idata ioRequest;
				
				//厂商请求入口地址
				code void (*VendorDeviceRequest[])(void) =
				{
					reserved,
					reserved,
					reserved,
					reserved,
					reserved,
					reserved,
					reserved,
					reserved,
					reserved,
					reserved,
					reserved,
					reserved,
					read_write_register,
					reserved,
					reserved,
					reserved
				};
				
				//USB总线重新连接(先断开,再连接)子程序
				void reconnect_USB(void)
				{
					unsigned long clk_cnt;
					MCU_LED0 = 0;//亮LED显示(实际应用中可去掉)
					MCU_LED1 = 0;//(实际应用中可去掉)
				
					D12SUSPD = 0;
					disconnect_USB();
					for (clk_cnt=0;clk_cnt					connect_USB();
				
					MCU_LED0 = 1;//灭LED显示(实际应用中可去掉)
					MCU_LED1 = 1;//(实际应用中可去掉)
				}
				
				//断开USB总线连接
				void disconnect_USB(void)
				{
					D12_SetMode(D12_NOLAZYCLOCK, D12_SETTOONE | D12_CLOCK_12M);
				}
				
				//连接到USB总线
				void connect_USB(void)
				{
					DISABLE;
					bEPPflags.value = 0;
					ENABLE;
					D12_SetDMA(0x0);//设置D12工作模式
					D12_SetMode(D12_NOLAZYCLOCK|D12_SOFTCONNECT, D12_SETTOONE | D12_CLOCK_12M);
				}
				
				//总线复位中断服务子程序
				void bus_reset(void)
				{
				//可添加用户代码(进行检测到总线复位的操作)
				}
				
				//DMA操作结束中断服务子程序
				void dma_eot(void)
				{
				//可添加用户代码(进行检测DMA操作结束的操作)
				}
				
				//端点1输出中断操作
				void ep1_txdone(void)
				{
					D12_ReadLastTransactionStatus(3);//复位中断寄存器
					//可添加用户代码(进行检测端点号3IN令牌的操作)
				}
				
				//端点1输入中断操作
				void ep1_rxdone(void)
				{
					unsigned char len;
					D12_ReadLastTransactionStatus(2);//复位中断寄存器
					len = D12_ReadEndpoint(2, sizeof(GenEpBuf), GenEpBuf);//读取端点1接收数据
					if (len != 0)
						bEPPflags.bits.ep1_rxdone = 1;//标志端点1接收到数据
				}
				
				//端点2输出中断操作
				void ep2_txdone(void)
				{
					D12_ReadLastTransactionStatus(5);//复位中断寄存器
					//可添加用户代码(进行检测端点号5IN令牌的操作)
				}
				
				//端点2输入中断操作
				void ep2_rxdone(void)
				{
					unsigned char len;
					D12_ReadLastTransactionStatus(4);//复位中断寄存器
					len = D12_ReadEndpoint(4, 64, EpBuf);//读取端点2接收数据
					//if (len != 0);
					//	bEPPflags.bits.ep2_rxdone = 1;//标志端点1接收到数据
				}
				
							

相关资源