Keil2SDCC代码转换工具

Linux下开发C51程序,keil无法运行,由于大部分代码都是keil格式的,我网上找了一圈,发现了一个比较好用的工具。keil2sdcc

Keil2SDCC

keil代码转SDCC格式代码的转换工具。

24C02操作--松瀚汇编源码

24C02操作 汇编

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
;
				
;		P_CLKIIC 	EQU	P1.2
;		P_DATIIC	EQU	P1.3
;		PM_DATIIC	EQU	P1M.3

;		EE_ADDR		DS	1    	;地址寄存器
;		TMP3_IIC	DS	1
;		TMP2_IIC	DS	1
;		TMP1_IIC	DS	1
;		DATA_TEMP	DS	1	;数据缓存
;		R_DATA		DS	1	;读数据寄存器
;		W_DATA		DS	1	;写数据寄存器

;*************************************************
;功能:读出一认定地址的数据
;INPUT:  EE_ADDR_H  , EE_ADDR_L  --> EE_ADDR
;OUTPUT: R_DATA	
;影响参数:DATA_TEMP ,TMP1_IIC ,TMP2_IIC	,TMP3_IIC,TMP4_IIC
;======================================
READ_EEPROM:
	MOV A,#200
	MOV TMP2_IIC,A
READ_EEPROM_LOOP0:
;------------
	B0BSET	PM_DATIIC			;SET  OUT MODEL
	CALL	STAR_CONDITION
	MOV	A,#10100000B
	B0MOV	DATA_TEMP,A
	CALL	SEND_DATA_ADD		;写模式,写入高3位地址
	B0BCLR	PM_DATIIC			;IN MODEL
	B0BSET	P_CLKIIC
	B0BTS1	P_DATIIC
	JMP 	READ_EEPROM_LOOP1
	DECMS 	TMP2_IIC
	JMP 	READ_EEPROM_LOOP0
	BSET	F_ERRIIC
READ_EEPROM_LOOP1:
	B0BCLR	P_CLKIIC
	B0BSET	PM_DATIIC			;OUT MODE
	MOV	A,EE_ADDR
	MOV	DATA_TEMP,A
	CALL	SEND_DATA_ADD		;写入低8位地址
	B0BCLR	PM_DATIIC			;IN MODEL
	B0BSET	P_CLKIIC
	MOV 	A,#200
	MOV 	TMP2_IIC,A
READ_EEPROM_LOOP2:
	B0BTS1	P_DATIIC
	JMP 	READ_EEPROM_LOOP3
	DECMS 	TMP2_IIC
	JMP 	READ_EEPROM_LOOP2
	BSET	F_ERRIIC	
READ_EEPROM_LOOP3:
	B0BCLR	P_CLKIIC
	B0BSET	PM_DATIIC			;OUT MODEL
	CALL	STAR_CONDITION
	MOV	A,#10100001B
	MOV	DATA_TEMP,A
	CALL	SEND_DATA_ADD		;读出数据
	B0BCLR	PM_DATIIC			;IN MODEL
	B0BSET	P_CLKIIC
	MOV 	A,#200
	MOV	 TMP2_IIC,A
READ_EEPROM_LOOP4:
	B0BTS1	P_DATIIC
	JMP 	READ_EEPROM_LOOP5
	DECMS 	TMP2_IIC
	JMP 	READ_EEPROM_LOOP4
	BSET	F_ERRIIC	
READ_EEPROM_LOOP5:
	B0BCLR	P_CLKIIC
	CALL	OUT_DATA_X
	B0BSET	PM_DATIIC			;OUT MODEL
	CALL	STOP_CONDITION
	B0BCLR	PM_DATIIC			;IN MODEL
;-------------
	MOV 	A,DATA_TEMP
	MOV 	R_DATA,A     		 ;8.28
	RET
;************************************************************************
;功能:定入一指定地址的数据
;INPUT:  EE_ADDR_H  , EE_ADDR_L ,W_DATA
;OUTPUT: F_EER ,24写入有错	
;影响参数:DATA_TEMP ,TMP1_IIC ,TMP2_IIC	,TMP3_IIC
;===================================================
WRITE_EEPROM:
;先读出,与写入相同则不写 --> 如果读出的数与要写的数一致则不用再写
	
	CALL	READ_EEPROM	;

	MOV	A,R_DATA
	XOR	A,W_DATA
	BTS0	FZ
	RET

;=================================
	MOV	A,#3		;如果写数据失败则重复写 最多写3次
	MOV	TMP3_IIC,A
;------------
WRITE_EEPROM00:	
	B0BSET	PM_DATIIC		;SET P1.3 OUT MODEL
	CALL	STAR_CONDITION
	MOV	A,#10100000B		;写入高3位地址
	MOV	DATA_TEMP,A
	CALL	SEND_DATA_ADD		;DEVICE_ADDRESS
	B0BCLR	PM_DATIIC		;IN MODEL
	B0BSET	P_CLKIIC
	MOV 	A,#200
	MOV 	TMP2_IIC,A
WRITE_EEPROM_LOOP0:
	B0BTS1	P_DATIIC
	JMP 	WRITE_EEPROM_LOOP1
	DECMS 	TMP2_IIC
	JMP 	WRITE_EEPROM_LOOP0
	BSET	F_ERRIIC	
WRITE_EEPROM_LOOP1:
	B0BCLR	P_CLKIIC
	B0BSET	PM_DATIIC			;OUT
	MOV	A,EE_ADDR
	MOV	DATA_TEMP,A
	CALL	SEND_DATA_ADD		;写入低8位地址
	B0BCLR	PM_DATIIC			;IN MODEL
	B0BSET	P_CLKIIC
	MOV 	A,#200
	MOV 	TMP2_IIC,A
WRITE_EEPROM_LOOP2:
	B0BTS1	P_DATIIC
	JMP 	WRITE_EEPROM_LOOP3
	DECMS 	TMP2_IIC
	JMP 	WRITE_EEPROM_LOOP2
	BSET	F_ERRIIC	
WRITE_EEPROM_LOOP3:
	B0BCLR	P_CLKIIC
	B0BSET	PM_DATIIC		;OUT
	MOV	A,W_DATA
	MOV	DATA_TEMP,A
	CALL	SEND_DATA_ADD		;写入的数据
	B0BCLR	P_DATIIC;
	B0BCLR	PM_DATIIC		;IN MODEL
	B0BSET	P_CLKIIC
	MOV 	A,#200
	MOV 	TMP2_IIC,A
WRITE_EEPROM_LOOP4:
	B0BTS1	P_DATIIC
	JMP 	WRITE_EEPROM_LOOP5
	DECMS 	TMP2_IIC
	JMP 	WRITE_EEPROM_LOOP4
	BSET	F_ERRIIC	
WRITE_EEPROM_LOOP5:
	B0BCLR	P_CLKIIC
	B0BSET	PM_DATIIC			;OUT
	B0BSET	P_DATIIC
	JMP $+1
	B0BCLR	P_DATIIC
	CALL	STOP_CONDITION
	CALL	STOP_CONDITION
	B0BCLR	PM_DATIIC			;IN MODEL
;---------------
;读出比较是否与定入的一致
	CALL	READ_EEPROM
	MOV	A,R_DATA
	CMPRS	A,W_DATA
	RET
	DECMS	TMP3_IIC
	JMP	WRITE_EEPROM00
	BSET	F_EEPOM_W	
	RET
;----------------
OUT_DATA_X:
	CLR	DATA_TEMP
	MOV	A,#8H
	MOV	TMP1_IIC,A
OUT_LOOP1:
	B0BCLR	PFLAG.2
	B0BTS0	P_DATIIC
	B0BSET	PFLAG.2
;===========================

	JMP 	$+1
 	JMP 	$+1
	B0BSET	P_CLKIIC
	JMP 	$+1
 	JMP 	$+1
	B0BCLR	P_CLKIIC
;==========================
	RLCM	DATA_TEMP
	DECMS	TMP1_IIC
	JMP	OUT_LOOP1
	RET
;----------------
SEND_DATA_ADD:			;
	MOV	A,#8H
	MOV	TMP1_IIC,A
SEND_LOOP1:
	RLCM	DATA_TEMP
	B0BCLR	P_DATIIC
	B0BTS0	PFLAG.2
	B0BSET	P_DATIIC
;===========================
	JMP 	$+1
 	JMP 	$+1
	B0BSET	P_CLKIIC
	JMP 	$+1
 	JMP 	$+1
	B0BCLR	P_CLKIIC
;==========================
	DECMS	TMP1_IIC
	JMP	SEND_LOOP1
	RLCM	DATA_TEMP
	RET	
;---------
POSITIVE_EDGE:		;起始信号
	JMP 	$+1
 	JMP 	$+1
	B0BSET	P_CLKIIC
	JMP 	$+1
 	JMP 	$+1
	B0BCLR	P_CLKIIC
	RET
;----------
STAR_CONDITION:		;结束信号
	B0BSET	P_CLKIIC
	B0BSET	P_DATIIC
	JMP $+1
	JMP $+1
	B0BCLR	P_DATIIC
	JMP $+1
  	JMP $+1
	B0BCLR	P_CLKIIC
	RET
;------------
STOP_CONDITION:			;
	B0BCLR	P_DATIIC
	B0BSET	P_CLKIIC	
	JMP 	$+1
	JMP 	$+1
	B0BSET	P_DATIIC
	JMP 	$+1
	JMP 	$+1
	B0BCLR	P_CLKIIC
	B0BCLR	P_DATIIC
	RET	

复旦微电子FMC24C16D存储芯片 具有唯一ID和安全扇区的有线串行EEPROM

复旦微电子FMC24C16D存储芯片 具有唯一ID和安全扇区的有线串行EEPROM

描述 ■FM24C16D提供16384位串行电可擦除可编程只读存储器(EEPROM),由2048个字组成,每个字8位,带128位UID和16字节安全扇区。该设备经过优化,适用于许多需要低功率和低电压操作的工业和商业应用。

MFC 改变static字体颜色、大小、背景颜色

MFC 改变窗口和static字体颜色、大小、背景颜色

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22

HBRUSH CUSB_IAP_ProgramDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
    HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
    HBRUSH aBrush;
    // TODO:  在此更改 DC 的任何特性
    switch (nCtlColor)
    {
    case CTLCOLOR_DLG:/*对话框*/
     
        aBrush = CreateSolidBrush(RGB(136, 136, 136));
        hbr = aBrush;
    case CTLCOLOR_STATIC:/*所有静态标签*/
        pDC->SetBkColor(RGB(136, 136, 136));//背景色
        pDC->SetTextColor(RGB(255, 255,255));//文字色
        aBrush = CreateSolidBrush(RGB(136, 136, 136));
        hbr = aBrush;
        break;
    }
    // TODO:  如果默认的不是所需画笔,则返回另一个画笔
    return hbr;
}

Notepad++添加到电脑右键菜单

将notepad++添加到电脑的右键菜单.

代码

新建一个文本文件,添加一下内容

1
2
3
4
5
6
7
8
Windows Registry Editor Version 5.00
 
[HKEY_CLASSES_ROOT\*\shell\NotePad++]
@="Edit with &Notepad++"
"Icon"="C:\\Program Files\\Notepad++\\notepad++.exe"
 
[HKEY_CLASSES_ROOT\*\shell\NotePad++\Command]
@="C:\\Program Files\\Notepad++\\notepad++.exe \"%1\""

将文件改名为right.reg ,然后双击文件.提示点是.完成.

完美解决在KEIL中报错:error:cannot load driver JL2CM3.dll

报错信息

1
2
3
4
5
6
Cannot load driver 'C:\Keil_v5\ARM\Segger\JL2CM3.dll'.

Possible Reasons:
 - Driver DLL could not be found in the specified path
 - Driver DLL requires additional DLL's which are not installed
 - Required Hardware Drivers are not installed

解决方案

在电脑的PATH环境变量中添加上 C:\Keil_v5\ARM\Segger\ 这个路径,报错完美解决.