📄 debug.c
字号:
}
///////////////////////////////////////////////////////////////////////////////
// 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 + -