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

📄 debug.c

📁 一款收款机C源代码!因为是几年前的代码了
💻 C
📖 第 1 页 / 共 3 页
字号:
}

///////////////////////////////////////////////////////////////////////////////
// Descript:	Uart debug: uart 1 & uart 3
// In Param:	void
// Out Param:	void
// Return:		void
///////////////////////////////////////////////////////////////////////////////
void Uart_Debug(void)
{
	Wr_Str_Uart(PORT0, "Hello,Weihua", 12);
	Wr_Str_Uart(PORT1, "Hello,P B M", 11);
	Wr_Str_Uart(PORT3, "Hello,R & D", 11);

	ClrBarCodeMode();
	while (1)
	{
		byte getByte;

		if (Uart_ReadByte(PORT3, &getByte) == OK)
		{
			Wr_Str_Uart(PORT3, &getByte, 1);
		}

		if (Uart_ReadByte(PORT1, &getByte) == OK)
		{
			Wr_Str_Uart(PORT1, &getByte, 1);
		}

		bellcnt = 2;
	}

	SetBarCodeMode();
}

///////////////////////////////////////////////////////////////////////////////
// Descript:	保护打印机和FM相关电路,避免因错误操作导致电路损坏.
// In Param:	void
// Out Param:	void
// Return:		void
///////////////////////////////////////////////////////////////////////////////
void Sys_Protect(void)
{
	// 保护打印机和FM电路.
	pd13 = 0xff;											// 关闭马达驱动电流.
	p13 = 0xcc;

	pd1_5 = 1;												// 关闭打印机电源.
	p1_5 = 0;

	prc2 = 1;												// 关闭FM电源.
	pd9_4 = 1;
	prc2 = 1;
	pd9_3 = 1;
	pd14_1 = 1;
	p9_4 = 0;
	p9_3 = 0;
	p14_1 = 0;
}

///////////////////////////////////////////////////////////////////////////////
// Descript:	SII热敏打印机马达驱动调试.
// In Param:	void
// Out Param:	void
// Return:		void
///////////////////////////////////////////////////////////////////////////////
void Wait_Time(word us)
{
//	if (us > 10)
//		us -= 10;
	tb2mr = 0x40;								// f8, disable gate, timer mode
	tb2 =  us * 110592 / (10 * 1000 * 8);	// set timer A2 initial value
	tb2ic = 0;									// enable timer A2 downflow interrupt
	tb2s = 1;
	ir_tb2ic = 0;

	while (ir_tb2ic == 0);
	tb2s = 0;
	ir_tb2ic = 0;
}


///////////////////////////////////////////////////////////////////////////////
// Descript:	打印机调试.
// In Param:	void
// Out Param:	void
// Return:		void
///////////////////////////////////////////////////////////////////////////////
//byte g_PrnSendBuf[PRN_DOT_BYTES_MAX+1];
//byte g_PrnSendFinish;
void Prn_Debug(void)
{
	// 送数,加热调试.
//	{
//		void Prn_DotBuffDmaSend(byte flag);
//		void Prn_InitDma(void);
//		
//		#define	PRN_STB1					p1_0
//		#define	STB2						p1_1
//		#define	STB3						p1_2
//		#define	STB4						p1_3
//		#define	PRN_LATCH				p9_7
//		#define	PRN_VCC_CTRL			p1_4
//		#define	PRN_VPR_CTRL			p1_5
//		#define	STB1_DIR					pd1_0
//		#define	STB2_DIR					pd1_1
//		#define	STB3_DIR					pd1_2
//		#define	STB4_DIR					pd1_3
//		#define	PRN_LATCH_DIR			pd9_7
//		#define	PRN_VCC_CTRL_DIR		pd1_4
//		#define	PRN_VPR_CTRL_DIR		pd1_5
//		
//		// close all
//		PRN_VPR_CTRL_DIR = 1;
//		PRN_VPR_CTRL = 0;									// 高电平有效.
//		PRN_VCC_CTRL_DIR = 1;
//		PRN_VCC_CTRL = 1;									// 低电平有效.
//		STB1_DIR = 1;
//		STB2_DIR = 1;
//		STB3_DIR = 1;
//		STB4_DIR = 1;
//		PRN_STB1 = 1;											// 低电平有效.
//		STB2 = 1;
//		STB3 = 1;
//		STB4 = 1;
//
//		prc2 = 1;
//		PRN_LATCH_DIR = 1;
//		PRN_LATCH = 1;										// 上升沿有效.
//
//		Prn_InitDma();											// 初始化DMA. (其中同步串口4在serial.c中已初始化)
//		
//		// 打开电源.
//		PRN_VCC_CTRL = 0;									// 低电平有效.
//		PRN_VPR_CTRL = 1;									// 高电平有效.
//		
//		// 送数.
//		memset(g_PrnSendBuf, 0x0f, PRN_DOT_BYTES_MAX);
//		g_PrnSendFinish = 0;
//		Prn_DotBuffDmaSend(0);
//		while (g_PrnSendFinish == 0);					// 等待送数完成.
//		
//		// 锁存.
//		PRN_LATCH = 0;										// 上升沿有效.
//		PRN_LATCH = 0;										// 上升沿有效.
//		PRN_LATCH = 1;										// 上升沿有效.
//
//		// 分段加热.
//		PRN_STB1 = 0;
//		STB2 = 1;
//		STB3 = 1;
//		STB4 = 1;
//		{
//			word i;
//			for (i=0; i<1000; i++);						// 加热约1000us.
//		}
//		PRN_STB1 = 1;
//		STB2 = 0;
//		STB3 = 1;
//		STB4 = 1;
//		{
//			word i;
//			for (i=0; i<1000; i++);						// 加热约1000us.
//		}
//		PRN_STB1 = 1;
//		STB2 = 1;
//		STB3 = 0;
//		STB4 = 1;
//		{
//			word i;
//			for (i=0; i<1000; i++);						// 加热约1000us.
//		}
//		PRN_STB1 = 1;
//		STB2 = 1;
//		STB3 = 1;
//		STB4 = 0;
//		{
//			word i;
//			for (i=0; i<1000; i++);						// 加热约1000us.
//		}
//
//		// 关闭电源.
//		PRN_VCC_CTRL = 1;									// 低电平有效.
//		PRN_VPR_CTRL = 0;									// 高电平有效.
//		
//		// 短鸣.
//		bellcnt = 30;
//		
//		return;
//	}

	
	// 马达调试.
	{
		byte i;
		word step;
		#define	MOTOR_STEP_MAX				4
		const byte stepPhase[MOTOR_STEP_MAX] = {0, 1, 3, 2};
		
		pd13 = 0xff;											// 关闭马达驱动电流.
		p13 = 0xcc;
	//	Wait(3000);
		bellcnt = 10;
	
		{
			#define	PRN_FOSC					110592 / (10 * 1000 * 8)

			// 常速走纸打印.
			#define	MOTOR_ACC_MAX_STEP	(8+1)				// 第一步是启动.
			const word motorAccTime[MOTOR_ACC_MAX_STEP] = 
			{
				3578 * PRN_FOSC, 3578 * PRN_FOSC,  2212 * PRN_FOSC,  1708 * PRN_FOSC,  
				1434 * PRN_FOSC, 1257 * PRN_FOSC,  1131 * PRN_FOSC,  1036 * PRN_FOSC,  
				962 * PRN_FOSC
			};
			
//			// 快速走纸打印.
//			#define	MOTOR_ACC_MAX_STEP	(64+1)			// 第一步是启动.
//			const word motorAccTime[MOTOR_ACC_MAX_STEP] = 
//			{
//				7757 * PRN_FOSC, 7757 * PRN_FOSC,  4794 * PRN_FOSC,  3702 * PRN_FOSC,  
//				3108 * PRN_FOSC, 2724 * PRN_FOSC,  2452 * PRN_FOSC,  2246 * PRN_FOSC,  
//				2084 * PRN_FOSC, 1952 * PRN_FOSC,  1842 * PRN_FOSC,  1749 * PRN_FOSC, 
//				1668 * PRN_FOSC, 1597 * PRN_FOSC,  1535 * PRN_FOSC,  1479 * PRN_FOSC,  
//				1429 * PRN_FOSC, 1383 * PRN_FOSC,  1342 * PRN_FOSC,  1304 * PRN_FOSC,  
//				1269 * PRN_FOSC, 1237 * PRN_FOSC,  1207 * PRN_FOSC,  1179 * PRN_FOSC, 
//				1153 * PRN_FOSC, 1128 * PRN_FOSC,  1106 * PRN_FOSC,  1084 * PRN_FOSC,  
//				1064 * PRN_FOSC, 1044 * PRN_FOSC,  1026 * PRN_FOSC,  1009 * PRN_FOSC,  
//				992 * PRN_FOSC,  976 * PRN_FOSC,   961 * PRN_FOSC,   947 * PRN_FOSC,  
//				933 * PRN_FOSC,  920 * PRN_FOSC,   908 * PRN_FOSC,   896 * PRN_FOSC,   
//				884 * PRN_FOSC,  873 * PRN_FOSC,   862 * PRN_FOSC,   852 * PRN_FOSC,   
//				842 * PRN_FOSC,  832 * PRN_FOSC,   823 * PRN_FOSC,   813 * PRN_FOSC,  
//				805 * PRN_FOSC,  796 * PRN_FOSC,   788 * PRN_FOSC,   780 * PRN_FOSC,   
//				772 * PRN_FOSC,  765 * PRN_FOSC,   758 * PRN_FOSC,   750 * PRN_FOSC,   
//				744 * PRN_FOSC,  737 * PRN_FOSC,   730 * PRN_FOSC,   724 * PRN_FOSC,  
//				718 * PRN_FOSC,  712 * PRN_FOSC,   706 * PRN_FOSC,   700 * PRN_FOSC,  
//				694 * PRN_FOSC
//			};

			byte step = 0;
			word cnt;
			byte loopTime;

			{
				step = 0;
				tb2mr = 0x40;								// f8, disable gate, timer mode
				tb2ic = 0;									// enable timer A2 downflow interrupt
				tb2s = 0;
				ir_tb2ic = 0;

				disint();
				CloseBuzzer();
				tb2 = motorAccTime[step];
				tb2s = 1;
//				for (cnt=0; cnt<10000; cnt++)			// 在步进10000步时,末端出现异常:收据马达不走纸. --- 将仿真器换成芯片后正常.
				for (cnt=0; cnt<1000; cnt++)
				{
					while (ir_tb2ic == 0);
//					p13 = (((stepPhase[cnt % MOTOR_STEP_MAX] << 4) + 0x00) & 0xf0) +
//						(((stepPhase[cnt % MOTOR_STEP_MAX]) + 0x00) & 0x0f);
//					p13 = (((stepPhase[cnt % MOTOR_STEP_MAX]) + 0x00) & 0x0f) + 0xc0;
					p13 = (((stepPhase[cnt % MOTOR_STEP_MAX] << 4) + 0x00) & 0xf0) + 0x0c;
					if (step < (MOTOR_ACC_MAX_STEP - 1))
					{
						step++;
					}
					else
					{
					}
					ir_tb2ic = 0;
					tb2 = motorAccTime[step];
					wdts = 0xff;
//					if ((cnt % 20) == 0)					// 模拟动态加速,测试噪音及失步情况.
//					{
//						step = 2;
//						tb2 = motorAccTime[step];
//					}
				}
				tb2s = 0;
				enint();

//				p13 |= 0x44; // 降低电流.

				Wait(60);

				p13 |= 0xcc; // 关闭电流.
				bellcnt = 30;
				Wait(1000);
			}
			return;
			
			for (loopTime = 0; loopTime < 3; loopTime++)
			{
				step = 0;
				tb2mr = 0x40;								// f8, disable gate, timer mode
				tb2ic = 0;									// enable timer A2 downflow interrupt
				tb2s = 0;
				ir_tb2ic = 0;

				disint();
				tb2 = motorAccTime[step];
				tb2s = 1;
				for (cnt=0; cnt<3000; cnt++)
				{
					while (ir_tb2ic == 0);
					p13 = (((stepPhase[cnt % MOTOR_STEP_MAX] << 4) + 0x00) & 0xf0) +
						(((stepPhase[cnt % MOTOR_STEP_MAX]) + 0x00) & 0x0f);
					ir_tb2ic = 0;
					if (step < (MOTOR_ACC_MAX_STEP - 1))
					{
						step++;
					}
					tb2 = motorAccTime[step];
					wdts = 0xff;
				}
				tb2s = 0;
				enint();

				p13 = 0xcc;												// 关闭电源.
				bellcnt = 30;
				Wait(1000);
			}

			bellcnt = 0xfe;
		}
		


/*	
		for (step=0; step<500; step++)
		{
			p13 = ((stepPhase[step % MOTOR_STEP_MAX] + 0x00) & 0x0f) +
					(((stepPhase[step % MOTOR_STEP_MAX] << 4) + 0x00) & 0xf0);
	//		p13 = ((stepPhase[step % MOTOR_STEP_MAX] << 4) + 0x00) & 0xf0;
			//Uart_WriteByte(PORT1, ((stepPhase[step % MOTOR_STEP_MAX] << 4) + 0x00) & 0xf0);
			Wait(10);
		}
*/
	
	/*
		for (step=0; step<500; step++)
		{
			p13 = (stepPhase[step % MOTOR_STEP_MAX] + 0x00) & 0x0f;
			//Uart_WriteByte(PORT1, (stepPhase[step % MOTOR_STEP_MAX] + 0x00) & 0x0f);
			Wait(8);
		}
	*/

		p13 = 0xcc;												// 关闭电源.
		Wait(1000);
		bellcnt = 30;
		return;
	}
	
	// 首先测试其电源VPR是否受控,及电压是否正常.
	{
		byte i;
		
		pd1_5 = 1;												// 关闭打印机电源.
		p1_5 = 0;
		
		for (i=0; i<5; i++)
		{
			p1_5 = 1;
			Wait(500);
			p1_5 = 0;
			Wait(1500);
		}
	}
}

///////////////////////////////////////////////////////////////////////////////
// Descript:	VFD display debug
// In Param:	void
// Out Param:	void
// Return:		void
///////////////////////////////////////////////////////////////////////////////
void Vfd_Debug(void)
{
	byte i;
	
	//while (1)
//	for (i=0; i<3; i++)
	{
		disp_Char_Str("---1234---", 0);
		Wait(500);
		bellcnt = 2;
		disp_Char_Str("   8888   ", 0);
		Wait(500);
	}
}

/******************************************************************************
Description: 打印机打印点数较多时,电流大,用以测试新变压器的带载能力.
******************************************************************************/
void Dbg_PrintPower(void)
{
	word i;
	
	for (i=0; i<3; i++)
	{
		Prn_InsStr("ABCDEFGHIJKLMNOPQRSTU", MAX_PRN_LEN, NM_FONT_PRN, FLUSH_RIGHT);
		Prn_Str(1);
		Prn_InsStr("= = = = = = = = = = =", MAX_PRN_LEN, NM_FONT_PRN, FLUSH_RIGHT);
		Prn_Str(1);
		Prn_InsStr("=====================", MAX_PRN_LEN, NM_FONT_PRN, FLUSH_RIGHT);
		Prn_Str(1);
		Prn_InsStr("AEEEEEEEEEEEEEEEEEEEY", MAX_PRN_LEN, NM_FONT_PRN, FLUSH_RIGHT);
		Prn_Str(1);
	}
	
	for (i=0; i<500; i++)
	{
		bellcnt = 2;
		while ((phead+1) == prear);
		Prn_Dot_Ring[phead][0] = NM_DOT_FD_CNTR;
		Prn_Dot_Ring[phead][1] = 2;
		memset(&Prn_Dot_Ring[phead][7], 0x55, 32);
		memset(&Prn_Dot_Ring[phead][7+32], 0, 8);
		memset(&Prn_Dot_Ring[phead][7+32+8], 0x55, 32);
		phead++;
	}

	Prn_InsStr("ABCDEFGHIJKLMNOPQRSTU", MAX_PRN_LEN, NM_FONT_PRN, FLUSH_RIGHT);
	Prn_Str(1);

	bellcnt = 50;
	Wait(2000);

	Prn_InsStr("ABCDEFGHIJKLMNOPQRSTU", MAX_PRN_LEN, NM_FONT_PRN, FLUSH_RIGHT);
	Prn_Str(1);

	for (i=0; i<500; i++)
	{
		bellcnt = 2;
		while ((phead+1) == prear);
		Prn_Dot_Ring[phead][0] = NM_DOT_FD_CNTR;
		Prn_Dot_Ring[phead][1] = 2;
		memset(&Prn_Dot_Ring[phead][7], 0x77, 32);
		memset(&Prn_Dot_Ring[phead][7+32], 0, 8);
		memset(&Prn_Dot_Ring[phead][7+32+8], 0x77, 32);
		phead++;
	}

	bellcnt = 50;
	Wait(2000);

	for (i=0; i<500; i++)
	{
		bellcnt = 2;
		while ((phead+1) == prear);
		Prn_Dot_Ring[phead][0] = NM_DOT_FD_CNTR;
		Prn_Dot_Ring[phead][1] = 2;
		memset(&Prn_Dot_Ring[phead][7], 0xff, 32);
		memset(&Prn_Dot_Ring[phead][7+32], 0, 8);
		memset(&Prn_Dot_Ring[phead][7+32+8], 0xff, 32);
		phead++;
	}
}

/******************************************************************************
Description:
******************************************************************************/

⌨️ 快捷键说明

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